Skip to content

Commit 6a32093

Browse files
AIHCERjankara
authored andcommitted
inotify: fix watch count leak when fsnotify_add_inode_mark_locked() fails
When fsnotify_add_inode_mark_locked() fails in inotify_new_watch(), the error path calls inotify_remove_from_idr() but does not call dec_inotify_watches() to undo the preceding inc_inotify_watches(). This leaks a watch count, and repeated failures can exhaust the max_user_watches limit with -ENOSPC even when no watches are active. Prior to commit 1cce1ee ("inotify: Convert to using per-namespace limits"), the watch count was incremented after fsnotify_add_mark_locked() succeeded, so this path was not affected. The conversion moved inc_inotify_watches() before the mark insertion without adding the corresponding rollback. Add the missing dec_inotify_watches() call in the error path. Fixes: 1cce1ee ("inotify: Convert to using per-namespace limits") Cc: stable@vger.kernel.org Signed-off-by: Chia-Ming Chang <chiamingc@synology.com> Signed-off-by: robbieko <robbieko@synology.com> Reviewed-by: Nikolay Borisov <nik.borisov@suse.com> Link: https://patch.msgid.link/20260224093442.3076294-1-chiamingc@synology.com Signed-off-by: Jan Kara <jack@suse.cz>
1 parent f4d0ec0 commit 6a32093

1 file changed

Lines changed: 1 addition & 0 deletions

File tree

fs/notify/inotify/inotify_user.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,7 @@ static int inotify_new_watch(struct fsnotify_group *group,
621621
if (ret) {
622622
/* we failed to get on the inode, get off the idr */
623623
inotify_remove_from_idr(group, tmp_i_mark);
624+
dec_inotify_watches(group->inotify_data.ucounts);
624625
goto out_err;
625626
}
626627

0 commit comments

Comments
 (0)