提交 393cc3f5 编写于 作者: J Jiri Slaby 提交者: Jeff Layton

fs/fcntl: f_setown, allow returning error

Allow f_setown to return an error value. We will fail in the next patch
with EINVAL for bad input to f_setown, so tile the path for the later
patch.
Signed-off-by: NJiri Slaby <jslaby@suse.cz>
Reviewed-by: NJeff Layton <jlayton@redhat.com>
Cc: Jeff Layton <jlayton@poochiereds.net>
Cc: "J. Bruce Fields" <bfields@fieldses.org>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: linux-fsdevel@vger.kernel.org
Signed-off-by: NJeff Layton <jlayton@redhat.com>
上级 94073ad7
...@@ -109,7 +109,7 @@ void __f_setown(struct file *filp, struct pid *pid, enum pid_type type, ...@@ -109,7 +109,7 @@ void __f_setown(struct file *filp, struct pid *pid, enum pid_type type,
} }
EXPORT_SYMBOL(__f_setown); EXPORT_SYMBOL(__f_setown);
void f_setown(struct file *filp, unsigned long arg, int force) int f_setown(struct file *filp, unsigned long arg, int force)
{ {
enum pid_type type; enum pid_type type;
struct pid *pid; struct pid *pid;
...@@ -123,6 +123,8 @@ void f_setown(struct file *filp, unsigned long arg, int force) ...@@ -123,6 +123,8 @@ void f_setown(struct file *filp, unsigned long arg, int force)
pid = find_vpid(who); pid = find_vpid(who);
__f_setown(filp, pid, type, force); __f_setown(filp, pid, type, force);
rcu_read_unlock(); rcu_read_unlock();
return 0;
} }
EXPORT_SYMBOL(f_setown); EXPORT_SYMBOL(f_setown);
...@@ -305,8 +307,7 @@ static long do_fcntl(int fd, unsigned int cmd, unsigned long arg, ...@@ -305,8 +307,7 @@ static long do_fcntl(int fd, unsigned int cmd, unsigned long arg,
force_successful_syscall_return(); force_successful_syscall_return();
break; break;
case F_SETOWN: case F_SETOWN:
f_setown(filp, arg, 1); err = f_setown(filp, arg, 1);
err = 0;
break; break;
case F_GETOWN_EX: case F_GETOWN_EX:
err = f_getown_ex(filp, arg); err = f_getown_ex(filp, arg);
......
...@@ -1249,7 +1249,7 @@ extern void fasync_free(struct fasync_struct *); ...@@ -1249,7 +1249,7 @@ extern void fasync_free(struct fasync_struct *);
extern void kill_fasync(struct fasync_struct **, int, int); extern void kill_fasync(struct fasync_struct **, int, int);
extern void __f_setown(struct file *filp, struct pid *, enum pid_type, int force); extern void __f_setown(struct file *filp, struct pid *, enum pid_type, int force);
extern void f_setown(struct file *filp, unsigned long arg, int force); extern int f_setown(struct file *filp, unsigned long arg, int force);
extern void f_delown(struct file *filp); extern void f_delown(struct file *filp);
extern pid_t f_getown(struct file *filp); extern pid_t f_getown(struct file *filp);
extern int send_sigurg(struct fown_struct *fown); extern int send_sigurg(struct fown_struct *fown);
......
...@@ -950,8 +950,7 @@ static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg) ...@@ -950,8 +950,7 @@ static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg)
err = -EFAULT; err = -EFAULT;
if (get_user(pid, (int __user *)argp)) if (get_user(pid, (int __user *)argp))
break; break;
f_setown(sock->file, pid, 1); err = f_setown(sock->file, pid, 1);
err = 0;
break; break;
case FIOGETOWN: case FIOGETOWN:
case SIOCGPGRP: case SIOCGPGRP:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册