diff options
author | Pavel Emelyanov <xemul@openvz.org> | 2007-11-28 19:21:31 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-11-29 12:24:52 -0500 |
commit | fd79b77117f16264206ed2618199d42e93cc8f09 (patch) | |
tree | 5441a9bea8e58106a419e910eb547fe731539ac4 /ipc | |
parent | 75d427982fef672b3608ae809b8819ec6358edfe (diff) |
ipc: lost unlock and fput in mqueue.c on error path
The error path in sys_mq_getsetattr() after the call to
audit_mq_getsetattr() is wrong - the info->lock is not unlocked and the
struct file *filp is not put.
Fix them both.
Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Cc: Pierre Peiffer <pierre.peiffer@bull.net>
Cc: Nadia Derbey <Nadia.Derbey@bull.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'ipc')
-rw-r--r-- | ipc/mqueue.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/ipc/mqueue.c b/ipc/mqueue.c index 1e04cd464af9..6ca7b97114f3 100644 --- a/ipc/mqueue.c +++ b/ipc/mqueue.c | |||
@@ -1138,8 +1138,10 @@ asmlinkage long sys_mq_getsetattr(mqd_t mqdes, | |||
1138 | omqstat.mq_flags = filp->f_flags & O_NONBLOCK; | 1138 | omqstat.mq_flags = filp->f_flags & O_NONBLOCK; |
1139 | if (u_mqstat) { | 1139 | if (u_mqstat) { |
1140 | ret = audit_mq_getsetattr(mqdes, &mqstat); | 1140 | ret = audit_mq_getsetattr(mqdes, &mqstat); |
1141 | if (ret != 0) | 1141 | if (ret != 0) { |
1142 | goto out; | 1142 | spin_unlock(&info->lock); |
1143 | goto out_fput; | ||
1144 | } | ||
1143 | if (mqstat.mq_flags & O_NONBLOCK) | 1145 | if (mqstat.mq_flags & O_NONBLOCK) |
1144 | filp->f_flags |= O_NONBLOCK; | 1146 | filp->f_flags |= O_NONBLOCK; |
1145 | else | 1147 | else |