]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
fsnotify: fix sb_connectors leak
authorAmir Goldstein <amir73il@gmail.com>
Thu, 9 Sep 2021 11:56:34 +0000 (14:56 +0300)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 10 Sep 2021 16:46:48 +0000 (09:46 -0700)
Fix a leak in s_fsnotify_connectors counter in case of a race between
concurrent add of new fsnotify mark to an object.

The task that lost the race fails to drop the counter before freeing
the unused connector.

Following umount() hangs in fsnotify_sb_delete()/wait_var_event(),
because s_fsnotify_connectors never drops to zero.

Fixes: ec44610fe2b8 ("fsnotify: count all objects with attached connectors")
Reported-by: Murphy Zhou <jencce.kernel@gmail.com>
Link: https://lore.kernel.org/linux-fsdevel/20210907063338.ycaw6wvhzrfsfdlp@xzhoux.usersys.redhat.com/
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/notify/mark.c

index 95006d1d29abe195d4dd188d8e34b7c698e138bc..fa1d99101f8950f744e0e1889ffe5bf88e2fcb87 100644 (file)
@@ -531,6 +531,7 @@ static int fsnotify_attach_connector_to_object(fsnotify_connp_t *connp,
                /* Someone else created list structure for us */
                if (inode)
                        fsnotify_put_inode_ref(inode);
+               fsnotify_put_sb_connectors(conn);
                kmem_cache_free(fsnotify_mark_connector_cachep, conn);
        }