Patch "fsnotify: pin both inode and vfsmount mark" has been added to the 4.14-stable tree
This is a note to let you know that I've just added the patch titled
fsnotify: pin both inode and vfsmount mark
to the 4.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
fsnotify-pin-both-inode-and-vfsmount-mark.patch
and it can be found in the queue-4.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
0d6ec079d6aaa098b978d6395973bb027c752a03Mon Sep 17 00:00:00 2001
From: Miklos Szeredi <[email protected]>
Date: Mon, 30 Oct 2017 21:14:55 +0100
Subject: fsnotify: pin both inode and vfsmount mark
From: Miklos Szeredi <[email protected]>
commit 0d6ec079d6aaa098b978d6395973bb027c752a03 upstream.
We may fail to pin one of the marks in fsnotify_prepare_user_wait() when dropping the srcu read lock, resulting in use after free at the next iteration.
Solution is to store both marks in iter_info instead of just the one we'll be sending the event for.
--- fs/notify/fsnotify.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
fs/notify/fsnotify.c +7 -3
@@ -335,6 +335,13 @@ int fsnotify(struct inode *to_tell, __u3 struct fsnotify_mark, obj_list); vfsmount_group = vfsmount_mark->group; } +/* +* Need to protect both marks against freeing so that we can +* continue iteration from this place, regardless of which mark +* we actually happen to send an event for. +*/ + iter_info.inode_mark = inode_mark; + iter_info.vfsmount_mark = vfsmount_mark;if (inode_group && vfsmount_group) { int cmp = fsnotify_compare_groups(inode_group,
@@ -348,9 +355,6 @@ int fsnotify(struct inode *to_tell, __u3 } } - iter_info.inode_mark = inode_mark; - iter_info.vfsmount_mark = vfsmount_mark; - ret =send_to_group (to_tell, inode_mark, vfsmount_mark, mask, data, data_is, cookie, file_name, &iter_info);
Patches currently in stable-queue which might be from [email protected] are
queue-4.14/fsnotify-clean-up-fsnotify_prepare-finish_user_wait.patch queue-4.14/fsnotify-fix-pinning-group-in-fsnotify_prepare_user_wait.patch queue-4.14/fanotify-fix-fsnotify_prepare_user_wait-failure.patch queue-4.14/fsnotify-pin-both-inode-and-vfsmount-mark.patch queue-4.14/ovl-put-upperdentry-if-ovl_check_origin-fails.patch