Message ID | 20170613092254.22235-1-jslaby@suse.cz (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, 2017-06-13 at 11:22 +0200, Jiri Slaby wrote: > 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: Jiri Slaby <jslaby@suse.cz> > 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 > --- > fs/fcntl.c | 7 ++++--- > include/linux/fs.h | 2 +- > net/socket.c | 3 +-- > 3 files changed, 6 insertions(+), 6 deletions(-) > > diff --git a/fs/fcntl.c b/fs/fcntl.c > index bbf80344c125..313eba860346 100644 > --- a/fs/fcntl.c > +++ b/fs/fcntl.c > @@ -109,7 +109,7 @@ void __f_setown(struct file *filp, struct pid *pid, enum pid_type type, > } > 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; > struct pid *pid; > @@ -123,6 +123,8 @@ void f_setown(struct file *filp, unsigned long arg, int force) > pid = find_vpid(who); > __f_setown(filp, pid, type, force); > rcu_read_unlock(); > + > + return 0; > } > EXPORT_SYMBOL(f_setown); > > @@ -305,8 +307,7 @@ static long do_fcntl(int fd, unsigned int cmd, unsigned long arg, > force_successful_syscall_return(); > break; > case F_SETOWN: > - f_setown(filp, arg, 1); > - err = 0; > + err = f_setown(filp, arg, 1); > break; > case F_GETOWN_EX: > err = f_getown_ex(filp, arg); > diff --git a/include/linux/fs.h b/include/linux/fs.h > index ecc301043abf..6dd215a339d4 100644 > --- a/include/linux/fs.h > +++ b/include/linux/fs.h > @@ -1250,7 +1250,7 @@ extern void fasync_free(struct fasync_struct *); > 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, 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 pid_t f_getown(struct file *filp); > extern int send_sigurg(struct fown_struct *fown); > diff --git a/net/socket.c b/net/socket.c > index 8f9dab330d57..59e902b9df09 100644 > --- a/net/socket.c > +++ b/net/socket.c > @@ -991,8 +991,7 @@ static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg) > err = -EFAULT; > if (get_user(pid, (int __user *)argp)) > break; > - f_setown(sock->file, pid, 1); > - err = 0; > + err = f_setown(sock->file, pid, 1); > break; > case FIOGETOWN: > case SIOCGPGRP: Looks good: Reviewed-by: Jeff Layton <jlayton@redhat.com>
diff --git a/fs/fcntl.c b/fs/fcntl.c index bbf80344c125..313eba860346 100644 --- a/fs/fcntl.c +++ b/fs/fcntl.c @@ -109,7 +109,7 @@ void __f_setown(struct file *filp, struct pid *pid, enum pid_type type, } 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; struct pid *pid; @@ -123,6 +123,8 @@ void f_setown(struct file *filp, unsigned long arg, int force) pid = find_vpid(who); __f_setown(filp, pid, type, force); rcu_read_unlock(); + + return 0; } EXPORT_SYMBOL(f_setown); @@ -305,8 +307,7 @@ static long do_fcntl(int fd, unsigned int cmd, unsigned long arg, force_successful_syscall_return(); break; case F_SETOWN: - f_setown(filp, arg, 1); - err = 0; + err = f_setown(filp, arg, 1); break; case F_GETOWN_EX: err = f_getown_ex(filp, arg); diff --git a/include/linux/fs.h b/include/linux/fs.h index ecc301043abf..6dd215a339d4 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -1250,7 +1250,7 @@ extern void fasync_free(struct fasync_struct *); 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, 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 pid_t f_getown(struct file *filp); extern int send_sigurg(struct fown_struct *fown); diff --git a/net/socket.c b/net/socket.c index 8f9dab330d57..59e902b9df09 100644 --- a/net/socket.c +++ b/net/socket.c @@ -991,8 +991,7 @@ static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg) err = -EFAULT; if (get_user(pid, (int __user *)argp)) break; - f_setown(sock->file, pid, 1); - err = 0; + err = f_setown(sock->file, pid, 1); break; case FIOGETOWN: case SIOCGPGRP:
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: Jiri Slaby <jslaby@suse.cz> 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 --- fs/fcntl.c | 7 ++++--- include/linux/fs.h | 2 +- net/socket.c | 3 +-- 3 files changed, 6 insertions(+), 6 deletions(-)