Skip to content

Commit 6ad6c40

Browse files
Vladimir Davydovgregkh
Vladimir Davydov
authored andcommitted
mqueue: sys_mq_open: do not call mnt_drop_write() if read-only
commit 38d78e5 upstream. mnt_drop_write() must be called only if mnt_want_write() succeeded, otherwise the mnt_writers counter will diverge. mnt_writers counters are used to check if remounting FS as read-only is OK, so after an extra mnt_drop_write() call, it would be impossible to remount mqueue FS as read-only. Besides, on umount a warning would be printed like this one: ===================================== [ BUG: bad unlock balance detected! ] 3.9.0-rc3 #5 Not tainted ------------------------------------- a.out/12486 is trying to release lock (sb_writers) at: mnt_drop_write+0x1f/0x30 but there are no more locks to release! Signed-off-by: Vladimir Davydov <[email protected]> Cc: Doug Ledford <[email protected]> Cc: KOSAKI Motohiro <[email protected]> Cc: "Eric W. Biederman" <[email protected]> Cc: Al Viro <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 463675f commit 6ad6c40

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

ipc/mqueue.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -840,7 +840,8 @@ SYSCALL_DEFINE4(mq_open, const char __user *, u_name, int, oflag, umode_t, mode,
840840
fd = error;
841841
}
842842
mutex_unlock(&root->d_inode->i_mutex);
843-
mnt_drop_write(mnt);
843+
if (!ro)
844+
mnt_drop_write(mnt);
844845
out_putname:
845846
putname(name);
846847
return fd;

0 commit comments

Comments
 (0)