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

Commit 515e0d66 authored by Al Viro's avatar Al Viro
Browse files

switch mqueue syscalls to fget_light()



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent bdbf6943
Loading
Loading
Loading
Loading
+14 −12
Original line number Diff line number Diff line
@@ -953,7 +953,7 @@ SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes, const char __user *, u_msg_ptr,
	ktime_t expires, *timeout = NULL;
	struct timespec ts;
	struct posix_msg_tree_node *new_leaf = NULL;
	int ret = 0;
	int ret = 0, fput_needed;

	if (u_abs_timeout) {
		int res = prepare_timeout(u_abs_timeout, &expires, &ts);
@@ -967,7 +967,7 @@ SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes, const char __user *, u_msg_ptr,

	audit_mq_sendrecv(mqdes, msg_len, msg_prio, timeout ? &ts : NULL);

	filp = fget(mqdes);
	filp = fget_light(mqdes, &fput_needed);
	if (unlikely(!filp)) {
		ret = -EBADF;
		goto out;
@@ -1056,7 +1056,7 @@ out_free:
	if (ret)
		free_msg(msg_ptr);
out_fput:
	fput(filp);
	fput_light(filp, fput_needed);
out:
	return ret;
}
@@ -1074,6 +1074,7 @@ SYSCALL_DEFINE5(mq_timedreceive, mqd_t, mqdes, char __user *, u_msg_ptr,
	ktime_t expires, *timeout = NULL;
	struct timespec ts;
	struct posix_msg_tree_node *new_leaf = NULL;
	int fput_needed;

	if (u_abs_timeout) {
		int res = prepare_timeout(u_abs_timeout, &expires, &ts);
@@ -1084,7 +1085,7 @@ SYSCALL_DEFINE5(mq_timedreceive, mqd_t, mqdes, char __user *, u_msg_ptr,

	audit_mq_sendrecv(mqdes, msg_len, 0, timeout ? &ts : NULL);

	filp = fget(mqdes);
	filp = fget_light(mqdes, &fput_needed);
	if (unlikely(!filp)) {
		ret = -EBADF;
		goto out;
@@ -1160,7 +1161,7 @@ SYSCALL_DEFINE5(mq_timedreceive, mqd_t, mqdes, char __user *, u_msg_ptr,
		free_msg(msg_ptr);
	}
out_fput:
	fput(filp);
	fput_light(filp, fput_needed);
out:
	return ret;
}
@@ -1173,7 +1174,7 @@ out:
SYSCALL_DEFINE2(mq_notify, mqd_t, mqdes,
		const struct sigevent __user *, u_notification)
{
	int ret;
	int ret, fput_needed;
	struct file *filp;
	struct sock *sock;
	struct inode *inode;
@@ -1220,13 +1221,13 @@ SYSCALL_DEFINE2(mq_notify, mqd_t, mqdes,
			skb_put(nc, NOTIFY_COOKIE_LEN);
			/* and attach it to the socket */
retry:
			filp = fget(notification.sigev_signo);
			filp = fget_light(notification.sigev_signo, &fput_needed);
			if (!filp) {
				ret = -EBADF;
				goto out;
			}
			sock = netlink_getsockbyfilp(filp);
			fput(filp);
			fput_light(filp, fput_needed);
			if (IS_ERR(sock)) {
				ret = PTR_ERR(sock);
				sock = NULL;
@@ -1245,7 +1246,7 @@ retry:
		}
	}

	filp = fget(mqdes);
	filp = fget_light(mqdes, &fput_needed);
	if (!filp) {
		ret = -EBADF;
		goto out;
@@ -1292,7 +1293,7 @@ retry:
	}
	spin_unlock(&info->lock);
out_fput:
	fput(filp);
	fput_light(filp, fput_needed);
out:
	if (sock) {
		netlink_detachskb(sock, nc);
@@ -1308,6 +1309,7 @@ SYSCALL_DEFINE3(mq_getsetattr, mqd_t, mqdes,
{
	int ret;
	struct mq_attr mqstat, omqstat;
	int fput_needed;
	struct file *filp;
	struct inode *inode;
	struct mqueue_inode_info *info;
@@ -1319,7 +1321,7 @@ SYSCALL_DEFINE3(mq_getsetattr, mqd_t, mqdes,
			return -EINVAL;
	}

	filp = fget(mqdes);
	filp = fget_light(mqdes, &fput_needed);
	if (!filp) {
		ret = -EBADF;
		goto out;
@@ -1356,7 +1358,7 @@ SYSCALL_DEFINE3(mq_getsetattr, mqd_t, mqdes,
		ret = -EFAULT;

out_fput:
	fput(filp);
	fput_light(filp, fput_needed);
out:
	return ret;
}