Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 393cc3f5 authored by Jiri Slaby's avatar Jiri Slaby Committed by Jeff Layton
Browse files

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: default avatarJiri Slaby <jslaby@suse.cz>
Reviewed-by: default avatarJeff 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: default avatarJeff Layton <jlayton@redhat.com>
parent 94073ad7
Loading
Loading
Loading
Loading
+4 −3
Original line number Original line Diff line number Diff line
@@ -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);
+1 −1
Original line number Original line Diff line number Diff line
@@ -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);
+1 −2
Original line number Original line Diff line number Diff line
@@ -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: