aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndré Goddard Rosa <andre.goddard@gmail.com>2010-02-23 02:04:28 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2010-03-03 14:46:05 -0500
commit4294a8eedb17bbc45e1e7447c2a4d05332943248 (patch)
treedb83b372de61b43208e08a97dd5f0280552d7ffa
parent4919c5e45a91b5db5a41695fe0357fbdff0d5767 (diff)
mqueue: fix mq_open() file descriptor leak on user-space processes
We leak fd on lookup_one_len() failure Signed-off-by: André Goddard Rosa <andre.goddard@gmail.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r--ipc/mqueue.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/ipc/mqueue.c b/ipc/mqueue.c
index c79bd57353e7..04985a7256c2 100644
--- a/ipc/mqueue.c
+++ b/ipc/mqueue.c
@@ -705,7 +705,7 @@ SYSCALL_DEFINE4(mq_open, const char __user *, u_name, int, oflag, mode_t, mode,
705 dentry = lookup_one_len(name, ipc_ns->mq_mnt->mnt_root, strlen(name)); 705 dentry = lookup_one_len(name, ipc_ns->mq_mnt->mnt_root, strlen(name));
706 if (IS_ERR(dentry)) { 706 if (IS_ERR(dentry)) {
707 error = PTR_ERR(dentry); 707 error = PTR_ERR(dentry);
708 goto out_err; 708 goto out_putfd;
709 } 709 }
710 mntget(ipc_ns->mq_mnt); 710 mntget(ipc_ns->mq_mnt);
711 711
@@ -742,7 +742,6 @@ out:
742 mntput(ipc_ns->mq_mnt); 742 mntput(ipc_ns->mq_mnt);
743out_putfd: 743out_putfd:
744 put_unused_fd(fd); 744 put_unused_fd(fd);
745out_err:
746 fd = error; 745 fd = error;
747out_upsem: 746out_upsem:
748 mutex_unlock(&ipc_ns->mq_mnt->mnt_root->d_inode->i_mutex); 747 mutex_unlock(&ipc_ns->mq_mnt->mnt_root->d_inode->i_mutex);