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: Jiri Slaby <jslaby@suse.cz> Reviewed-by: Jeff 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: Jeff Layton <jlayton@redhat.com>
This commit is contained in:
parent
94073ad77f
commit
393cc3f511
|
@ -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)
|
||||||
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,
|
||||||
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 *);
|
||||||
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)
|
||||||
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:
|
||||||
|
|
Loading…
Reference in New Issue