| From | David Howells <> | Subject | [PATCH 01/73] VFS: Make chown() and lchown() call fchownat() [ver #2] | Date | Tue, 21 Feb 2012 17:57:29 +0000 |
| |
Make the chown() and lchown() syscalls jump to the fchownat() syscall with the appropriate extra arguments.
Signed-off-by: David Howells <dhowells@redhat.com> ---
fs/open.c | 41 +++++++---------------------------------- 1 files changed, 7 insertions(+), 34 deletions(-)
diff --git a/fs/open.c b/fs/open.c index 77becc0..3c44148 100644 --- a/fs/open.c +++ b/fs/open.c @@ -527,25 +527,6 @@ static int chown_common(struct path *path, uid_t user, gid_t group) return error; } -SYSCALL_DEFINE3(chown, const char __user *, filename, uid_t, user, gid_t, group) -{ - struct path path; - int error; - - error = user_path(filename, &path); - if (error) - goto out; - error = mnt_want_write(path.mnt); - if (error) - goto out_release; - error = chown_common(&path, user, group); - mnt_drop_write(path.mnt); -out_release: - path_put(&path); -out: - return error; -} - SYSCALL_DEFINE5(fchownat, int, dfd, const char __user *, filename, uid_t, user, gid_t, group, int, flag) { @@ -573,23 +554,15 @@ out: return error; } -SYSCALL_DEFINE3(lchown, const char __user *, filename, uid_t, user, gid_t, group) +SYSCALL_DEFINE3(chown, const char __user *, filename, uid_t, user, gid_t, group) { - struct path path; - int error; + return sys_fchownat(AT_FDCWD, filename, user, group, 0); +} - error = user_lpath(filename, &path); - if (error) - goto out; - error = mnt_want_write(path.mnt); - if (error) - goto out_release; - error = chown_common(&path, user, group); - mnt_drop_write(path.mnt); -out_release: - path_put(&path); -out: - return error; +SYSCALL_DEFINE3(lchown, const char __user *, filename, uid_t, user, gid_t, group) +{ + return sys_fchownat(AT_FDCWD, filename, user, group, + AT_SYMLINK_NOFOLLOW); } SYSCALL_DEFINE3(fchown, unsigned int, fd, uid_t, user, gid_t, group)
|