{"id":25593,"date":"2026-09-18T04:31:36","date_gmt":"2026-09-17T20:31:36","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90184"},"modified":"2026-09-18T04:31:36","modified_gmt":"2026-09-17T20:31:36","slug":"cve-2026-90184","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90184","title":{"rendered":"CVE-2026-90184 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nnull_blk: serialize c"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>null_blk: serialize configfs attribute updates with device setup<\/p>\n<p>The attribute store methods generated with NULLB_DEVICE_ATTR() refuse to<br \/>\nchange the configuration of a live device by testing<br \/>\nNULLB_DEV_FL_CONFIGURED, but that flag is only set by<br \/>\nnullb_device_power_store() after null_add_dev() has returned, and the<br \/>\nstore methods take no lock at all. configfs only serializes writes to<br \/>\nthe same open file (buffer-&gt;mutex), so a write to any attribute can run<br \/>\nconcurrently with null_add_dev() and change the device configuration<br \/>\nwhile it is being used.<\/p>\n<p>null_add_dev() reads the configuration several times, e.g. dev-&gt;zoned is<br \/>\nread once to set up the queue limits and once to initialize the zone<br \/>\nresources:<\/p>\n<p>  CPU0: echo 1 &gt; nullb0\/power         CPU1: echo 1 &gt; nullb0\/zoned<br \/>\n  nullb_device_power_store()<br \/>\n    mutex_lock(&amp;lock)<br \/>\n    null_add_dev()<br \/>\n      if (dev-&gt;zoned) -&gt; false<br \/>\n        \/* no BLK_FEAT_ZONED *\/       nullb_device_zoned_store()<br \/>\n                                        test_bit(FL_CONFIGURED) -&gt; 0<br \/>\n                                        dev-&gt;zoned = true<br \/>\n      blk_mq_alloc_disk()<br \/>\n        \/* queue is not zoned *\/<br \/>\n      if (nullb-&gt;dev-&gt;zoned) -&gt; true<br \/>\n        null_register_zoned_dev()<br \/>\n          blk_revalidate_disk_zones()<\/p>\n<p>blk_revalidate_disk_zones() is then called for a queue that does not<br \/>\nhave BLK_FEAT_ZONED set, which triggers its WARN_ON_ONCE() and fails the<br \/>\ndevice setup with -EIO:<\/p>\n<p>  WARNING: CPU: 2 PID: 322 at block\/blk-zoned.c:2357 blk_revalidate_disk_zones+0x4c\/0x560<\/p>\n<p>Clearing dev-&gt;zoned in the same window is worse: the queue is created<br \/>\nwith BLK_FEAT_ZONED but the zone resources are never initialized, so<br \/>\nadd_disk() succeeds for a zoned disk that has no zones. And a store that<br \/>\nlands after the last dev-&gt;zoned test leaves dev-&gt;zoned set while<br \/>\ndev-&gt;zones is still NULL, which null_process_zoned_cmd() dereferences on<br \/>\nthe first write.<\/p>\n<p>Fix this by taking the global lock, which nullb_device_power_store()<br \/>\nalready holds across null_add_dev() and null_del_dev(), around both the<br \/>\nNULLB_DEV_FL_CONFIGURED test and the update of the device configuration.<br \/>\nThe submit_queues and poll_queues apply callbacks are now called with<br \/>\nthat lock held, so remove the locking they did themselves.<\/p>\n<p>Since the store methods can run as soon as configfs_register_subsystem()<br \/>\nreturns, that is, before null_init() gets to mutex_init(&amp;lock), also<br \/>\ninitialize the lock statically with DEFINE_MUTEX().<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>null_blk: serialize configfs attribute updates with device setup<\/p>\n<p>The attribute store methods generated with NULLB_DEVICE_ATTR() re<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-25593","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/25593","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=25593"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=25593"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=25593"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}