{"id":25590,"date":"2026-09-18T04:31:36","date_gmt":"2026-09-17T20:31:36","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90181"},"modified":"2026-09-18T04:31:36","modified_gmt":"2026-09-17T20:31:36","slug":"cve-2026-90181","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90181","title":{"rendered":"CVE-2026-90181 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nublk: avoid teardown"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>ublk: avoid teardown retry loop on xarray allocation failure<\/p>\n<p>__ublk_shmem_remove_ranges() removes matching maple tree ranges in<br \/>\nbatches, but first stores each range into a temporary xarray so that the<br \/>\npages can be unpinned after dropping the maple tree lock.<\/p>\n<p>That temporary xarray is filled under the maple tree lock with<br \/>\nxa_store(&#8230;, GFP_ATOMIC). If the store fails before mas_erase(), the<br \/>\ncurrent range is left in the tree and the helper returns false. The<br \/>\nouter ublk_shmem_remove_ranges() loop then immediately retries the same<br \/>\nrange. While the atomic allocation keeps failing, the teardown path has<br \/>\nno forward progress.<\/p>\n<p>The issue can be reproduced with radix_tree_node failslab injection after<br \/>\na SHMEM_ZC buffer has already been registered:<\/p>\n<p>  # Kernel config:<br \/>\n  #   CONFIG_BLK_DEV_UBLK=y<br \/>\n  #   CONFIG_DEBUG_FS=y<br \/>\n  #   CONFIG_FAULT_INJECTION=y<br \/>\n  #   CONFIG_FAULT_INJECTION_DEBUG_FS=y<br \/>\n  #   CONFIG_FAILSLAB=y<\/p>\n<p>  echo 10 &gt; \/proc\/sys\/vm\/nr_hugepages<br \/>\n  mkdir -p \/tmp\/htlb<br \/>\n  mount -t hugetlbfs none \/tmp\/htlb<br \/>\n  fallocate -l 4M \/tmp\/htlb\/ublk_buf<\/p>\n<p>  dev_id=$(kublk add -t null &#8211;shmem_zc<br \/>\n\t\t&#8211;htlb \/tmp\/htlb\/ublk_buf |<br \/>\n\t   awk -F &#8216;[ :]&#8217; &#8216;\/dev id\/ {print $3}&#8217;)<\/p>\n<p>  echo 1 &gt; \/sys\/kernel\/slab\/radix_tree_node\/failslab<br \/>\n  echo Y &gt; \/sys\/kernel\/debug\/failslab\/cache-filter<br \/>\n  echo Y &gt; \/sys\/kernel\/debug\/failslab\/ignore-gfp-wait<br \/>\n  echo 1 &gt; \/sys\/kernel\/debug\/failslab\/interval<br \/>\n  echo -1 &gt; \/sys\/kernel\/debug\/failslab\/times<br \/>\n  echo 100 &gt; \/sys\/kernel\/debug\/failslab\/probability<\/p>\n<p>  kublk del -n &#8220;$dev_id&#8221;<\/p>\n<p>On the unfixed kernel the delete command was still running after 3<br \/>\nseconds. Disabling failslab made it return. The fault-injection stack<br \/>\nshowed:<\/p>\n<p>  should_failslab<br \/>\n  kmem_cache_alloc_lru_noprof<br \/>\n  __xas_nomem<br \/>\n  __xa_store<br \/>\n  xa_store<br \/>\n  __ublk_shmem_remove_ranges<br \/>\n  ublk_cdev_rel<br \/>\n  ublk_ctrl_del_dev<\/p>\n<p>Remove the allocation from the teardown loop. Keep the existing batch<br \/>\nlimit, but collect {base_pfn, nr_pages} pairs in a fixed-size stack array.<br \/>\nOnce a matching range is found, the range is erased from the maple tree<br \/>\nbefore dropping the lock, so each successful scan makes progress without<br \/>\ndepending on any GFP_ATOMIC allocation.<\/p>\n<p>With the same failslab settings, the fixed kernel completed<br \/>\n&#8220;kublk del -n $dev_id&#8221; successfully in about 45 ms.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>ublk: avoid teardown retry loop on xarray allocation failure<\/p>\n<p>__ublk_shmem_remove_ranges() removes matching maple tree ranges in<br \/>\nba<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-25590","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/25590","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=25590"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=25590"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=25590"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}