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; > }