{"id":29227,"date":"2026-09-25T20:32:11","date_gmt":"2026-09-25T12:32:11","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98072"},"modified":"2026-09-25T20:32:11","modified_gmt":"2026-09-25T12:32:11","slug":"cve-2026-98072","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98072","title":{"rendered":"CVE-2026-98072 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nnet\/rds: use wq_has_s"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>net\/rds: use wq_has_sleeper() in release_in_xmit()<\/p>\n<p>release_in_xmit() clears RDS_IN_XMIT with clear_bit_unlock() and then<br \/>\nchecks waitqueue_active() to decide whether anyone needs waking.<br \/>\nclear_bit_unlock() is only a release operation: it orders the<br \/>\ncritical section before the bit clear, but does not order the<br \/>\nsubsequent plain load of the wait queue head after it.  The waiter<br \/>\nside does the mirror image &#8211; it adds itself to the wait queue and<br \/>\nthen tests the bit.  That is the classic store-buffering pattern: the<br \/>\nreleasing CPU can read the wait queue as empty while the waiting CPU<br \/>\nstill reads the bit as set, so the sleeper is never woken.<\/p>\n<p>The waiters are rds_conn_shutdown() and rds_tcp_reset_callbacks(),<br \/>\nboth in uninterruptible wait_event() with no timeout.  A lost wake-up<br \/>\nstrands the shutdown worker on its single-threaded workqueue until<br \/>\nsome other sender releases the bit again &#8211; and on a connection that<br \/>\nis being torn down precisely because it failed, there may never be<br \/>\nanother sender.<\/p>\n<p>The barrier used to be there: release_in_xmit() did clear_bit()<br \/>\nfollowed by smp_mb__after_atomic() until commit 1422f28826d2 (&#8220;rds:<br \/>\nintroduce acquire\/release ordering in acquire\/release_in_xmit()&#8221;)<br \/>\nfolded both into clear_bit_unlock(), which strengthened the lock<br \/>\nhand-off but silently dropped the full barrier the wake-up check<br \/>\ndepends on.  The refill counterpart, release_refill() in<br \/>\nnet\/rds\/ib_recv.c, still carries its smp_mb__after_atomic() for<br \/>\nexactly this reason.<\/p>\n<p>Use wq_has_sleeper(), which is waitqueue_active() preceded by the<br \/>\nrequired full barrier.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>net\/rds: use wq_has_sleeper() in release_in_xmit()<\/p>\n<p>release_in_xmit() clears RDS_IN_XMIT with clear_bit_unlock() and then<br \/>\nchecks wa<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-29227","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/29227","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=29227"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=29227"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=29227"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}