{"id":25809,"date":"2026-09-18T04:31:55","date_gmt":"2026-09-17T20:31:55","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90400"},"modified":"2026-09-18T04:31:55","modified_gmt":"2026-09-17T20:31:55","slug":"cve-2026-90400","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90400","title":{"rendered":"CVE-2026-90400 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nmd: recheck spare cha"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>md: recheck spare changes before starting sync<\/p>\n<p>remove_spares() and remove_and_add_spares() modify the array&#8217;s rdev<br \/>\nconfiguration. These operations are only safe after the array has been<br \/>\nsuspended.<\/p>\n<p>md_start_sync() checks whether spare configuration changes are needed<br \/>\nbefore taking reconfig_mutex. However, the rdev state can change before<br \/>\nthe mutex is acquired, so the initial check can become stale. In that<br \/>\ncase, md_choose_sync_action() may remove or replace rdevs while normal<br \/>\nI\/O is still accessing them.<\/p>\n<p>The race can occur as follows:<\/p>\n<p>raid10d          Worker                      Normal IO<br \/>\n____________     _______________________     ______________________<\/p>\n<p>                                             raid10_write_request()<br \/>\n                                             wait_blocked_dev()<br \/>\nset Blocked<br \/>\nset Faulty<br \/>\n                                             Skip Faulty rdev<br \/>\n                                             rrdev-&gt;nr_pending++<br \/>\n                                             .repl_bio = bio<br \/>\n                 removeable_rdev = false     .<br \/>\n                 array not suspended         .<br \/>\nlock mddev                                   goto err_handle<br \/>\n                 lock mddev (wait)<br \/>\n                 .<br \/>\nupdate sb        .<br \/>\nclear Blocked    .<br \/>\n                 .<br \/>\nunlock mddev     .<br \/>\n                 lock mddev (acquires)<br \/>\n                 remove_spares()<br \/>\n                 removeable_rdev = true<\/p>\n<p>                 raid10_remove_disk()<br \/>\n                 rdev = replacement<br \/>\n                 replacement = NULL<br \/>\n                                             rdev_dec_pending(NULL)<br \/>\n                 unlock mddev                (NULL)-&gt;nr_pending&#8211;<\/p>\n<p>In this case, rdev_dec_pending() is called with a NULL pointer,<br \/>\nresulting in a NULL pointer dereference when attempting to decrement<br \/>\nnr_pending.<\/p>\n<p>Fix this by suspending the array when spare configuration changes are<br \/>\nneeded, including for non-read-write arrays, and checking again after<br \/>\ntaking reconfig_mutex. If the array was not already suspended and a<br \/>\nchange is now needed, release the mutex, suspend the array, and<br \/>\nreacquire the mutex before continuing.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>md: recheck spare changes before starting sync<\/p>\n<p>remove_spares() and remove_and_add_spares() modify the array&#8217;s rdev<br \/>\nconfiguration. <\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-25809","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/25809","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=25809"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=25809"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=25809"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}