{"id":7075,"date":"2026-09-04T18:49:24","date_gmt":"2026-09-04T10:49:24","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-72420"},"modified":"2026-09-04T18:49:24","modified_gmt":"2026-09-04T10:49:24","slug":"cve-2026-72420","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-72420","title":{"rendered":"CVE-2026-72420 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nmd\/raid5: avoid R5_Ov"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>md\/raid5: avoid R5_Overlap races while breaking stripe batches<\/p>\n<p>KCSAN report a race in break_stripe_batch_list() vs. raid5_make_request()<br \/>\non sh-&gt;dev[i].flags (plain word write vs. atomic bit op)..<\/p>\n<p>and .. one possible scenario is:<\/p>\n<p>CPU1                            CPU2<br \/>\nbreak_stripe_batch_list(sh1)<br \/>\n-&gt; handle sh2<br \/>\n-&gt; lock(sh2)<br \/>\n-&gt; sh2-&gt;batch_head = NULL<br \/>\n-&gt; unlock(sh2)<br \/>\n-&gt; test_and_clear_bit(R5_Overlap, sh2-&gt;dev[i].flags)<br \/>\n-&gt; wake_up_bit(sh2-&gt;dev[i].flags)<br \/>\n                                raid5_make_request()<br \/>\n                                -&gt; add_all_stripe_bios(sh2)<br \/>\n                                -&gt; lock(sh2)<br \/>\n                                -&gt; stripe_bio_overlaps(sh2) returns true<br \/>\n\t\t\t\t   batch_head is NULL, so new bio overlap<br \/>\n\t\t\t\t   exist bio on sh2 -&gt; true<br \/>\n                                -&gt; set_bit(R5_Overlap, sh2-&gt;dev[i].flags)<br \/>\n                                -&gt; unlock(sh2)<br \/>\n                                -&gt; wait_on_bit(sh2-&gt;dev[i].flags)<br \/>\n-&gt; sh2-&gt;dev[i].flags = sh1-&gt;dev[i].flags &amp; ~R5_Overlap<\/p>\n<p>No wait_up_bit(), CPU2 could be wait_on_bit() forever&#8230;<\/p>\n<p>Fix by :<br \/>\n&#8211; Expand the protect zone.<br \/>\n&#8211; Use batch_head&#8217;s device flag&#8217;s snaphot when no held head_sh-&gt;stripe_lock.<br \/>\n&#8211; Move sh\/head_sh-&gt;batch_head = NULL to the end of protected zone , and ,<br \/>\n  any concurrent add_all_stripe_bios() grabs sh-&gt;stripe_lock now either:<br \/>\n\t&#8211; see batch_head != null, and , is rejected by stripe_bio_overlaps()<br \/>\n\t  under the lock (no R5_Overlap wait ) , or ,<br \/>\n\t&#8211; sees batch_head == NULL, only after dev[i].flags has already been<br \/>\n\t  set and the prior R5_Overlap waiters worken.<\/p>\n<p>KCSAN report:<br \/>\n================================================<br \/>\n  BUG: KCSAN: data-race in break_stripe_batch_list \/ raid5_make_request<\/p>\n<p>  write (marked) to 0xffff8e89c8117548 of 8 bytes by task 4042 on cpu 0:<br \/>\n    raid5_make_request+0xea0\/0x2930<br \/>\n    md_handle_request+0x4a2\/0xa40<br \/>\n    md_submit_bio+0x109\/0x1a0<br \/>\n    __submit_bio+0x2ec\/0x390<br \/>\n    submit_bio_noacct_nocheck+0x457\/0x710<br \/>\n    submit_bio_noacct+0x2a7\/0xc20<br \/>\n    submit_bio+0x56\/0x250<br \/>\n    blkdev_direct_IO+0x54c\/0xda0<br \/>\n    blkdev_write_iter+0x38f\/0x570<br \/>\n    aio_write+0x22b\/0x490<br \/>\n    io_submit_one+0xa51\/0xf70<br \/>\n    __x64_sys_io_submit+0xf7\/0x220<br \/>\n    x64_sys_call+0x1907\/0x1c60<br \/>\n    do_syscall_64+0x130\/0x570<br \/>\n    entry_SYSCALL_64_after_hwframe+0x76\/0x7e<\/p>\n<p>  read to 0xffff8e89c8117548 of 8 bytes by task 4010 on cpu 5:<br \/>\n    break_stripe_batch_list+0x249\/0x480<br \/>\n    handle_stripe_clean_event+0x720\/0x9b0<br \/>\n    handle_stripe+0x32fb\/0x4500<br \/>\n    handle_active_stripes.isra.0+0x6e0\/0xa50<br \/>\n    raid5d+0x7e0\/0xba0<br \/>\n    md_thread+0x15a\/0x2d0<br \/>\n    kthread+0x1e3\/0x220<br \/>\n    ret_from_fork+0x37a\/0x410<br \/>\n    ret_from_fork_asm+0x1a\/0x30<\/p>\n<p>  value changed: 0x0000000000000019 -&gt; 0x0000000000000099 &#8211;&gt; R5_Overlap<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>md\/raid5: avoid R5_Overlap races while breaking stripe batches<\/p>\n<p>KCSAN report a race in break_stripe_batch_list() vs. raid5_make_req<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-7075","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/7075","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=7075"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7075"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}