Loading fs/open.c +4 −9 Original line number Diff line number Diff line Loading @@ -592,11 +592,11 @@ SYSCALL_DEFINE1(chroot, const char __user *, filename) struct path path; int error; unsigned int lookup_flags = LOOKUP_FOLLOW | LOOKUP_DIRECTORY; struct filename *name = getname(filename); CLASS(filename, name)(filename); retry: error = filename_lookup(AT_FDCWD, name, lookup_flags, &path, NULL); if (error) goto out; return error; error = path_permission(&path, MAY_EXEC | MAY_CHDIR); if (error) Loading @@ -606,19 +606,14 @@ SYSCALL_DEFINE1(chroot, const char __user *, filename) if (!ns_capable(current_user_ns(), CAP_SYS_CHROOT)) goto dput_and_out; error = security_path_chroot(&path); if (error) goto dput_and_out; if (!error) set_fs_root(current->fs, &path); error = 0; dput_and_out: path_put(&path); if (retry_estale(error, lookup_flags)) { lookup_flags |= LOOKUP_REVAL; goto retry; } out: putname(name); return error; } Loading Loading
fs/open.c +4 −9 Original line number Diff line number Diff line Loading @@ -592,11 +592,11 @@ SYSCALL_DEFINE1(chroot, const char __user *, filename) struct path path; int error; unsigned int lookup_flags = LOOKUP_FOLLOW | LOOKUP_DIRECTORY; struct filename *name = getname(filename); CLASS(filename, name)(filename); retry: error = filename_lookup(AT_FDCWD, name, lookup_flags, &path, NULL); if (error) goto out; return error; error = path_permission(&path, MAY_EXEC | MAY_CHDIR); if (error) Loading @@ -606,19 +606,14 @@ SYSCALL_DEFINE1(chroot, const char __user *, filename) if (!ns_capable(current_user_ns(), CAP_SYS_CHROOT)) goto dput_and_out; error = security_path_chroot(&path); if (error) goto dput_and_out; if (!error) set_fs_root(current->fs, &path); error = 0; dput_and_out: path_put(&path); if (retry_estale(error, lookup_flags)) { lookup_flags |= LOOKUP_REVAL; goto retry; } out: putname(name); return error; } Loading