{"id":25490,"date":"2026-09-18T04:31:27","date_gmt":"2026-09-17T20:31:27","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90081"},"modified":"2026-09-18T04:31:27","modified_gmt":"2026-09-17T20:31:27","slug":"cve-2026-90081","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90081","title":{"rendered":"CVE-2026-90081 &#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 rds_cong_map_updated()<\/p>\n<p>rds_cong_map_updated() runs after a peer&#8217;s congestion map has been<br \/>\nrewritten (by rds_tcp_cong_recv() and rds_ib_cong_recv(), or the<br \/>\nclear-all in the loopback and IB send-completion paths).  It bumps<br \/>\nrds_cong_generation and then checks waitqueue_active() on<br \/>\nmap-&gt;m_waitq and on rds_poll_waitq to decide whether anyone needs<br \/>\nwaking.  atomic_inc() carries no ordering and waitqueue_active() is a<br \/>\nplain load, so nothing orders the map and generation stores before<br \/>\nthe wait queue reads.  The waiters do the mirror image: rds_cong_wait()<br \/>\nadds itself to m_waitq and then tests the port bit, and rds_poll()<br \/>\nregisters on rds_poll_waitq and then reads the generation.  That is<br \/>\nthe store-buffering pattern described above waitqueue_active() in<br \/>\ninclude\/linux\/wait.h &#8211; the updater can observe an empty wait queue<br \/>\nwhile the waiter still observes the port as congested, and no wake-up<br \/>\nis issued.<\/p>\n<p>rds_cong_wait() is an interruptible sleep with no timeout, so a<br \/>\nsender blocked on a congested port stays blocked until the next<br \/>\ncongestion update from that peer arrives or a signal is delivered.<br \/>\nA poll() waiter misses the map-updated notification the same way.<\/p>\n<p>Use wq_has_sleeper(), which is waitqueue_active() preceded by the<br \/>\nrequired full barrier, as rds_tcp_state_change() already does for<br \/>\nthe same pattern.<\/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 rds_cong_map_updated()<\/p>\n<p>rds_cong_map_updated() runs after a peer&#8217;s congestion map has been<br \/>\nrewritt<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-25490","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/25490","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=25490"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=25490"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=25490"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}