Loading fs/open.c +12 −16 Original line number Diff line number Diff line Loading @@ -810,30 +810,26 @@ int do_fchownat(int dfd, const char __user *filename, uid_t user, gid_t group, struct path path; int error; int lookup_flags; struct filename *name; if ((flag & ~(AT_SYMLINK_NOFOLLOW | AT_EMPTY_PATH)) != 0) return -EINVAL; lookup_flags = (flag & AT_SYMLINK_NOFOLLOW) ? 0 : LOOKUP_FOLLOW; name = getname_uflags(filename, flag); CLASS(filename_uflags, name)(filename, flag); retry: error = filename_lookup(dfd, name, lookup_flags, &path, NULL); if (error) goto out; if (!error) { error = mnt_want_write(path.mnt); if (error) goto out_release; if (!error) { error = chown_common(&path, user, group); mnt_drop_write(path.mnt); out_release: } 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 +12 −16 Original line number Diff line number Diff line Loading @@ -810,30 +810,26 @@ int do_fchownat(int dfd, const char __user *filename, uid_t user, gid_t group, struct path path; int error; int lookup_flags; struct filename *name; if ((flag & ~(AT_SYMLINK_NOFOLLOW | AT_EMPTY_PATH)) != 0) return -EINVAL; lookup_flags = (flag & AT_SYMLINK_NOFOLLOW) ? 0 : LOOKUP_FOLLOW; name = getname_uflags(filename, flag); CLASS(filename_uflags, name)(filename, flag); retry: error = filename_lookup(dfd, name, lookup_flags, &path, NULL); if (error) goto out; if (!error) { error = mnt_want_write(path.mnt); if (error) goto out_release; if (!error) { error = chown_common(&path, user, group); mnt_drop_write(path.mnt); out_release: } path_put(&path); if (retry_estale(error, lookup_flags)) { lookup_flags |= LOOKUP_REVAL; goto retry; } out: putname(name); } return error; } Loading