mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
fsnotify: fix fsnotify hooks in pseudo filesystems
commit 29044dae2e746949ad4b9cbdbfb248994d1dcdb4 upstream. Commit49246466a9("fsnotify: move fsnotify_nameremove() hook out of d_delete()") moved the fsnotify delete hook before d_delete() so fsnotify will have access to a positive dentry. This allowed a race where opening the deleted file via cached dentry is now possible after receiving the IN_DELETE event. To fix the regression in pseudo filesystems, convert d_delete() calls to d_drop() (see commit46c46f8df9("devpts_pty_kill(): don't bother with d_delete()") and move the fsnotify hook after d_drop(). Add a missing fsnotify_unlink() hook in nfsdfs that was found during the audit of fsnotify hooks in pseudo filesystems. Note that the fsnotify hooks in simple_recursive_removal() follow d_invalidate(), so they require no change. Link: https://lore.kernel.org/r/[email protected] Reported-by: Ivan Delalande <[email protected]> Link: https://lore.kernel.org/linux-fsdevel/YeNyzoDM5hP5LtGW@visor/ Fixes:49246466a9("fsnotify: move fsnotify_nameremove() hook out of d_delete()") Cc: [email protected] # v5.3+ Signed-off-by: Amir Goldstein <[email protected]> Signed-off-by: Jan Kara <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
This commit is contained in:
parent
1614bd844e
commit
5463cfd833
4 changed files with 9 additions and 8 deletions
|
|
@ -1805,8 +1805,8 @@ void configfs_unregister_group(struct config_group *group)
|
|||
configfs_detach_group(&group->cg_item);
|
||||
d_inode(dentry)->i_flags |= S_DEAD;
|
||||
dont_mount(dentry);
|
||||
d_drop(dentry);
|
||||
fsnotify_rmdir(d_inode(parent), dentry);
|
||||
d_delete(dentry);
|
||||
inode_unlock(d_inode(parent));
|
||||
|
||||
dput(dentry);
|
||||
|
|
@ -1947,10 +1947,10 @@ void configfs_unregister_subsystem(struct configfs_subsystem *subsys)
|
|||
configfs_detach_group(&group->cg_item);
|
||||
d_inode(dentry)->i_flags |= S_DEAD;
|
||||
dont_mount(dentry);
|
||||
fsnotify_rmdir(d_inode(root), dentry);
|
||||
inode_unlock(d_inode(dentry));
|
||||
|
||||
d_delete(dentry);
|
||||
d_drop(dentry);
|
||||
fsnotify_rmdir(d_inode(root), dentry);
|
||||
|
||||
inode_unlock(d_inode(root));
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue