Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d3bc0fa8 authored by Jan Kara's avatar Jan Kara
Browse files

fsnotify: fix false positive warning on inode delete



When inode is getting deleted and someone else holds reference to a mark
attached to the inode, we just detach the connector from the inode. In
that case fsnotify_put_mark() called from fsnotify_destroy_marks() will
decide to recalculate mask for the inode and __fsnotify_recalc_mask()
will WARN about invalid connector type:

WARNING: CPU: 1 PID: 12015 at fs/notify/mark.c:139
__fsnotify_recalc_mask+0x2d7/0x350 fs/notify/mark.c:139

Actually there's no reason to warn about detached connector in
__fsnotify_recalc_mask() so just silently skip updating the mask in such
case.

Reported-by: default avatar <syzbot+c34692a51b9a6ca93540@syzkaller.appspotmail.com>
Fixes: 3ac70bfc ("fsnotify: add helper to get mask from connector")
Signed-off-by: default avatarJan Kara <jack@suse.cz>
parent 2ad0d526
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -132,13 +132,13 @@ static void __fsnotify_recalc_mask(struct fsnotify_mark_connector *conn)
	struct fsnotify_mark *mark;

	assert_spin_locked(&conn->lock);
	/* We can get detached connector here when inode is getting unlinked. */
	if (!fsnotify_valid_obj_type(conn->type))
		return;
	hlist_for_each_entry(mark, &conn->list, obj_list) {
		if (mark->flags & FSNOTIFY_MARK_FLAG_ATTACHED)
			new_mask |= mark->mask;
	}
	if (WARN_ON(!fsnotify_valid_obj_type(conn->type)))
		return;

	*fsnotify_conn_mask_p(conn) = new_mask;
}