summary refs log tree commit diff
path: root/ipc
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2012-08-27 03:11:34 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2012-09-26 21:10:09 -0400
commit515e0d6634086d61ae846f0e8785b6f0220f3422 (patch)
treeb099c7ec3b4c075851a70e56c4683e412ca3492e /ipc
parentbdbf69437a5ae6f820a6d3aa8c6e3c3ce7e6e05f (diff)
downloadlinux-515e0d6634086d61ae846f0e8785b6f0220f3422.tar.gz
switch mqueue syscalls to fget_light()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'ipc')
-rw-r--r--ipc/mqueue.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/ipc/mqueue.c b/ipc/mqueue.c
index 9a08acc9e649..5db1b69500fd 100644
--- a/ipc/mqueue.c
+++ b/ipc/mqueue.c
@@ -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;
 }