{"id":7135,"date":"2026-09-04T18:49:26","date_gmt":"2026-09-04T10:49:26","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-72469"},"modified":"2026-09-04T18:49:26","modified_gmt":"2026-09-04T10:49:26","slug":"cve-2026-72469","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-72469","title":{"rendered":"CVE-2026-72469 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nxprtrdma: Fix ep kref"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>xprtrdma: Fix ep kref imbalance on ADDR_CHANGE<\/p>\n<p>rpcrdma_cm_event_handler() falls through to the disconnected: label<br \/>\non RDMA_CM_EVENT_ADDR_CHANGE and calls rpcrdma_ep_put() with no<br \/>\nmatching get when the event arrives before RDMA_CM_EVENT_ESTABLISHED.<br \/>\nThe kref then underflows during connect teardown and<br \/>\nrpcrdma_xprt_disconnect() operates on a freed ep.<\/p>\n<p>Reference counts across a normal connection lifecycle:<\/p>\n<p>    rpcrdma_ep_create()             kref_init     -&gt;1<br \/>\n    rpcrdma_xprt_connect()          ep_get        -&gt;2  (before post_recvs)<br \/>\n    RDMA_CM_EVENT_ESTABLISHED       ep_get        -&gt;3<br \/>\n    RDMA_CM_EVENT_DISCONNECTED      ep_put        -&gt;2<br \/>\n    rpcrdma_xprt_drain()            ep_put        -&gt;1<br \/>\n    rpcrdma_xprt_disconnect() tail  ep_put        -&gt;0  (ep_destroy)<\/p>\n<p>The connect-time get in rpcrdma_xprt_connect(), taken just before<br \/>\nrpcrdma_post_recvs() &#8220;while there are outstanding Receives,&#8221; is<br \/>\nbalanced by rpcrdma_xprt_drain. ADDR_CHANGE before ESTABLISHED has<br \/>\nno get to consume, so its put drops the count to 1 and the drain<br \/>\nput then frees the ep while rpcrdma_xprt_disconnect() still holds a<br \/>\npointer to it.<\/p>\n<p>Fix by dispatching on the prior re_connect_status via xchg(): for<br \/>\nprev == 0 (pre-ESTABLISHED) wake the connect waiter and return with<br \/>\nno put; for prev == 1 call rpcrdma_force_disconnect() and return.<br \/>\nThe case-1 arm relies on the subsequent RDMA_CM_EVENT_DISCONNECTED<br \/>\nevent &#8212; reliably delivered when rdma_disconnect() is called on a<br \/>\nstill-connected cm_id &#8212; to balance the ESTABLISHED get;<br \/>\nrpcrdma_xprt_drain() continues to balance only that connect-time<br \/>\nget. Any other prior value means teardown is already in flight.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>xprtrdma: Fix ep kref imbalance on ADDR_CHANGE<\/p>\n<p>rpcrdma_cm_event_handler() falls through to the disconnected: label<br \/>\non RDMA_CM_EVEN<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-7135","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/7135","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=7135"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7135"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7135"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}