{"id":6989,"date":"2026-09-04T18:49:23","date_gmt":"2026-09-04T10:49:23","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-72354"},"modified":"2026-09-04T18:49:23","modified_gmt":"2026-09-04T10:49:23","slug":"cve-2026-72354","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-72354","title":{"rendered":"CVE-2026-72354 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nntfs: avoid stale run"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>ntfs: avoid stale runlist element dereference in MFT writeback<\/p>\n<p>ntfs_write_mft_block() maps each $MFT record through the $MFT data<br \/>\nrunlist. For sub-folio clusters it looks up a struct runlist_element under<br \/>\nni-&gt;runlist.lock, drops the lock, and later uses rl-&gt;length and rl-&gt;vcn<br \/>\nwhen choosing folio_sz.<\/p>\n<p>That pointer is only borrowed from ni-&gt;runlist.rl. Concurrent $MFT<br \/>\nallocation extension can merge a replacement runlist under the same lock,<br \/>\nand ntfs_rl_realloc() can free the old backing array. If that happens<br \/>\nbetween the lookup and the later folio_sz decision, writeback can<br \/>\ndereference freed runlist storage.<\/p>\n<p>The buggy scenario involves two paths, with each column showing the order<br \/>\nwithin that path:<\/p>\n<p>MFT writeback path:               $MFT allocation extension:<br \/>\n1. Look up rl under               1. Extend the $MFT data allocation.<br \/>\n   ni-&gt;runlist.lock.              2. Publish a replacement runlist.<br \/>\n2. Drop ni-&gt;runlist.lock.         3. Free the old runlist array.<br \/>\n3. Read rl-&gt;length and rl-&gt;vcn<br \/>\n   to choose folio_sz.<\/p>\n<p>Compute the remaining run length while ni-&gt;runlist.lock is still held, and<br \/>\nuse that scalar after unlock. This preserves the existing folio sizing<br \/>\ndecision without carrying a borrowed runlist_element across the lock<br \/>\nboundary.<\/p>\n<p>Validation reproduced this kernel report:<br \/>\nBUG: KASAN: slab-use-after-free in ntfs_mft_writepages+0x1c8d\/0x1fb0<\/p>\n<p>Call Trace:<\/p>\n<p> dump_stack_lvl+0x66\/0xa0<br \/>\n print_report+0xce\/0x630<br \/>\n ? ntfs_mft_writepages+0x1c8d\/0x1fb0<br \/>\n ? srso_alias_return_thunk+0x5\/0xfbef5<br \/>\n ? __virt_addr_valid+0x20d\/0x410<br \/>\n ? ntfs_mft_writepages+0x1c8d\/0x1fb0<br \/>\n kasan_report+0xe0\/0x110<br \/>\n ? ntfs_mft_writepages+0x1c8d\/0x1fb0<br \/>\n ntfs_mft_writepages+0x1c8d\/0x1fb0<br \/>\n ? __pfx_ntfs_mft_writepages+0x10\/0x10<br \/>\n ? __pfx___mutex_unlock_slowpath+0x10\/0x10<br \/>\n ? srso_alias_return_thunk+0x5\/0xfbef5<br \/>\n ? iput+0x92\/0xa80<br \/>\n do_writepages+0x219\/0x530<br \/>\n ? __pfx_do_writepages+0x10\/0x10<br \/>\n __writeback_single_inode+0x117\/0xf50<br \/>\n ? do_raw_spin_lock+0x130\/0x270<br \/>\n ? __pfx_do_raw_spin_lock+0x10\/0x10<br \/>\n ? __pfx___writeback_single_inode+0x10\/0x10<br \/>\n ? srso_alias_return_thunk+0x5\/0xfbef5<br \/>\n writeback_sb_inodes+0x65b\/0x1810<br \/>\n ? srso_alias_return_thunk+0x5\/0xfbef5<br \/>\n ? lock_acquire+0x2b8\/0x2f0<br \/>\n ? __pfx_writeback_sb_inodes+0x10\/0x10<br \/>\n ? lock_release+0x1e0\/0x280<br \/>\n ? _raw_spin_unlock+0x23\/0x40<br \/>\n ? move_expired_inodes+0x2b8\/0x850<br \/>\n __writeback_inodes_wb+0xf4\/0x270<br \/>\n ? __pfx___writeback_inodes_wb+0x10\/0x10<br \/>\n ? srso_alias_return_thunk+0x5\/0xfbef5<br \/>\n ? queue_io+0x2e4\/0x410<br \/>\n wb_writeback+0x666\/0x880<br \/>\n ? srso_alias_return_thunk+0x5\/0xfbef5<br \/>\n ? __pfx_wb_writeback+0x10\/0x10<br \/>\n ? srso_alias_return_thunk+0x5\/0xfbef5<br \/>\n ? srso_alias_return_thunk+0x5\/0xfbef5<br \/>\n ? get_nr_dirty_inodes+0x1c\/0x170<br \/>\n wb_workfn+0x75e\/0xbb0<br \/>\n ? srso_alias_return_thunk+0x5\/0xfbef5<br \/>\n ? _raw_spin_unlock_irqrestore+0x27\/0x60<br \/>\n ? __pfx_wb_workfn+0x10\/0x10<br \/>\n ? __pfx_debug_object_deactivate+0x10\/0x10<br \/>\n ? lock_acquire+0x2b8\/0x2f0<br \/>\n ? srso_alias_return_thunk+0x5\/0xfbef5<br \/>\n ? lock_release+0x1e0\/0x280<br \/>\n process_one_work+0x8d0\/0x1870<br \/>\n ? __pfx_process_one_work+0x10\/0x10<br \/>\n ? srso_alias_return_thunk+0x5\/0xfbef5<br \/>\n worker_thread+0x575\/0xf80<br \/>\n ? __pfx_worker_thread+0x10\/0x10<br \/>\n kthread+0x2e7\/0x3c0<br \/>\n ? __pfx_kthread+0x10\/0x10<br \/>\n ret_from_fork+0x576\/0x810<br \/>\n ? __pfx_ret_from_fork+0x10\/0x10<br \/>\n ? srso_alias_return_thunk+0x5\/0xfbef5<br \/>\n ? __switch_to+0x57e\/0xe10<br \/>\n ? __switch_to_asm+0x33\/0x70<br \/>\n ? __pfx_kthread+0x10\/0x10<br \/>\n ret_from_fork_asm+0x1a\/0x30<\/p>\n<p>Allocated by task 970:<br \/>\n kasan_save_stack+0x33\/0x60<br \/>\n kasan_save_track+0x14\/0x30<br \/>\n __kasan_kmalloc+0xaa\/0xb0<br \/>\n __kvmalloc_node_noprof+0x353\/0x920<br \/>\n ntfs_rl_realloc+0x3c\/0x80<br \/>\n ntfs_runlists_merge+0x1212\/0x3010<br \/>\n ntfs_mft_data_extend_allocation_nolock+0x3e0\/0x1f40<br \/>\n ntfs_mft_record_alloc+0x1ab4\/0x4f10<br \/>\n __ntfs_create+0x680\/0x2e50<br \/>\n ntfs_create+0x1e6\/0x3a0<br \/>\n path_openat+0x2b55\/0x3c10<br \/>\n do_file_open+0x1f4\/0x460<br \/>\n do_sys_openat2+0xde\/0x170<br \/>\n __x64_sys_openat+0x122\/0x1e0<br \/>\n do_syscall_64+0x115\/0x6a0<br \/>\n entry_SYSCALL_64_after_hwframe+0x77\/0x7f<\/p>\n<p>Freed by task 1294:<br \/>\n kasan_save_<br \/>\n&#8212;truncated&#8212;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>ntfs: avoid stale runlist element dereference in MFT writeback<\/p>\n<p>ntfs_write_mft_block() maps each $MFT record through the $MFT data<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-6989","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/6989","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=6989"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6989"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6989"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}