From 3154bc2a3a84c7e0e19e670044279d6cfe04359e Mon Sep 17 00:00:00 2001 From: David Howells Date: Mon, 25 Jun 2012 12:55:09 +0100 Subject: [PATCH] --- yaml --- r: 312937 b: refs/heads/master c: 55e4def0a6e79e7eb53017c4935adfed76510cd7 h: refs/heads/master i: 312935: 399df603db5fe7dd5c408ec7b492b6792a3c63a3 v: v3 --- [refs] | 2 +- trunk/fs/open.c | 41 +++++++---------------------------------- 2 files changed, 8 insertions(+), 35 deletions(-) diff --git a/[refs] b/[refs] index 1d8448839f9e..66cabc810549 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c3c4f69424db0760239762d36d0b1b6ae524008b +refs/heads/master: 55e4def0a6e79e7eb53017c4935adfed76510cd7 diff --git a/trunk/fs/open.c b/trunk/fs/open.c index 764cc9c201a5..75bea868ef8a 100644 --- a/trunk/fs/open.c +++ b/trunk/fs/open.c @@ -537,25 +537,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) { @@ -583,23 +564,15 @@ SYSCALL_DEFINE5(fchownat, int, dfd, const char __user *, filename, uid_t, user, 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)