On Fri, 27 Nov 2015 12:43:05 +0100
Paolo Bonzini <pbonz...@redhat.com> wrote:

> There is a minor time of check/time of use race between statfs and chroot.
> It can be fixed easily by stat-ing the root after it has been changed.
> 
> Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>
> ---

Reviewed-by: Greg Kurz <gk...@linux.vnet.ibm.com>

>  fsdev/virtfs-proxy-helper.c | 20 ++++++++++----------
>  1 file changed, 10 insertions(+), 10 deletions(-)
> 
> diff --git a/fsdev/virtfs-proxy-helper.c b/fsdev/virtfs-proxy-helper.c
> index 9097d15..ad1da0d 100644
> --- a/fsdev/virtfs-proxy-helper.c
> +++ b/fsdev/virtfs-proxy-helper.c
> @@ -1128,10 +1128,19 @@ int main(int argc, char **argv)
>          }
>      }
> 
> +    if (chdir("/") < 0) {
> +        do_perror("chdir");
> +        goto error;
> +    }
> +    if (chroot(rpath) < 0) {
> +        do_perror("chroot");
> +        goto error;
> +    }
> +
>      get_version = false;
>  #ifdef FS_IOC_GETVERSION
>      /* check whether underlying FS support IOC_GETVERSION */
> -    retval = statfs(rpath, &st_fs);
> +    retval = statfs("/", &st_fs);
>      if (!retval) {
>          switch (st_fs.f_type) {
>          case EXT2_SUPER_MAGIC:
> @@ -1144,16 +1153,7 @@ int main(int argc, char **argv)
>      }
>  #endif
> 
> -    if (chdir("/") < 0) {
> -        do_perror("chdir");
> -        goto error;
> -    }
> -    if (chroot(rpath) < 0) {
> -        do_perror("chroot");
> -        goto error;
> -    }
>      umask(0);
> -
>      if (init_capabilities() < 0) {
>          goto error;
>      }


Reply via email to