{"id":21517,"date":"2026-09-12T04:31:17","date_gmt":"2026-09-11T20:31:17","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89595"},"modified":"2026-09-12T04:31:17","modified_gmt":"2026-09-11T20:31:17","slug":"cve-2026-89595","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89595","title":{"rendered":"CVE-2026-89595 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nfsnotify: Fix stale o"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>fsnotify: Fix stale object mask after concurrent mark updates<\/p>\n<p>When a mark gets a new event bit, fanotify and inotify may avoid<br \/>\nrecalculating the object mask if the cached aggregate already contains that<br \/>\nbit. This is racy with a recalculation triggered by a concurrent update to<br \/>\nanother mark on the same connector.<\/p>\n<p>The concurrent scan can read the mark before the new bit is added, while<br \/>\nthe updater reads the old aggregate before that scan publishes its result.<br \/>\nThe updater then skips recalculation and the scan publishes a mask without<br \/>\nthe bit, leaving the object mask stale after both updates complete.<\/p>\n<p>This can be reproduced with two fanotify groups watching the same inode:<br \/>\none thread removes FAN_MODIFY from one existing mark while another thread<br \/>\nadds FAN_MODIFY to the other mark. After both fanotify_mark() calls return,<br \/>\nwrites can fail to produce FAN_MODIFY for the group whose mark now contains<br \/>\nthe bit. This was reproduced on an unmodified v6.12.95 kernel. The<br \/>\nequivalent inotify interleaving loses IN_MODIFY events.<\/p>\n<p>For normal fanotify additions, recalculate whenever the raw mark mask<br \/>\nchanges. The normal mask is not cleared asynchronously, so an unchanged<br \/>\naddition cannot introduce missing interest. Always recalculate ignore-mask<br \/>\nupdates because FS_MODIFY handling may clear the ignore mask without taking<br \/>\nmark-&gt;lock, making snapshot comparisons unreliable.<\/p>\n<p>Always recalculate after updating an existing inotify watch. Its replace<br \/>\npath temporarily sets mark-&gt;mask to zero, so a concurrent scan can observe<br \/>\nzero even when the old and final masks are equal. Assigning the replacement<br \/>\nmask directly would avoid the transient zero, but existing-watch updates<br \/>\nare infrequent, so unconditional recalculation is simpler.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>fsnotify: Fix stale object mask after concurrent mark updates<\/p>\n<p>When a mark gets a new event bit, fanotify and inotify may avoid<br \/>\nrec<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-21517","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/21517","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=21517"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21517"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21517"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}