{"id":25964,"date":"2026-09-18T04:32:09","date_gmt":"2026-09-17T20:32:09","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-93107"},"modified":"2026-09-18T04:32:09","modified_gmt":"2026-09-17T20:32:09","slug":"cve-2026-93107","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-93107","title":{"rendered":"CVE-2026-93107 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nRDMA\/rxe: Avoid repro"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>RDMA\/rxe: Avoid reprocessing the current packet after the QP enters the error state<\/p>\n<p>When do_complete() finds the QP in the error state it returns<br \/>\nRESPST_CHK_RESOURCE.  Before commit 49dc9c1f0c7e (&#8220;RDMA\/rxe: Cleanup<br \/>\nreset state handling in rxe_resp.c&#8221;) this was the flush loop:<br \/>\ncheck_resource() had an error-state branch that fetched each remaining<br \/>\nrecv WQE and completed it with IB_WC_WR_FLUSH_ERR, without touching<br \/>\nthe current packet.  That commit removed the error-state branch from<br \/>\ncheck_resource() (draining is now done at rxe_receiver() entry) but<br \/>\nkept the do_complete() error-state return.<\/p>\n<p>As a result, when a QP moves to the error state while a packet is<br \/>\nbeing completed &#8211; e.g. an rdma_cm disconnect racing with receive<br \/>\nprocessing &#8211; the responder state machine loops back into the request<br \/>\nprocessing chain with the already-completed packet still in hand:<br \/>\ncheck_resource() fetches a fresh recv WQE, execute()\/send_data_in()<br \/>\ncopies the same packet payload again, do_complete() posts another<br \/>\nIB_WC_SUCCESS CQE (qp-&gt;resp.status is still 0), and control returns<br \/>\nto the error-state check.  The loop re-executes the same packet once<br \/>\nper posted recv WQE (observed: ~1000 duplicate IB_WC_SUCCESS<br \/>\ncompletions of one SEND, one per ~8us, matching the RQ occupancy)<br \/>\nuntil the RQ is exhausted, after which qp-&gt;resp.wqe is NULL and<br \/>\nsend_data_in() dereferences it:<\/p>\n<p>  BUG: kernel NULL pointer dereference, address: 0000000000000014<br \/>\n  Workqueue: rxe_wq do_work<br \/>\n  RIP: copy_data+0x29\/0x1f0<br \/>\n  Call Trace:<br \/>\n   send_data_in+0x25\/0x50<br \/>\n   rxe_receiver+0xf36\/0x1dd0<\/p>\n<p>The duplicate completions are indistinguishable from real receives to<br \/>\nthe ULP.  During an rds stress test, the message was accepted as new and<br \/>\ndelivered the same datagram to user space hundreds of times, corrupting<br \/>\nthe stream; any ULP that relies on RC exactly-once delivery is affected.<\/p>\n<p>A live packet reaching the error-state check in do_complete() has<br \/>\nbeen executed and completed exactly once and must be consumed, not<br \/>\nre-processed.  Return RESPST_CLEANUP for it (dequeue and free); keep<br \/>\nreturning RESPST_CHK_RESOURCE for the pkt == NULL case.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>RDMA\/rxe: Avoid reprocessing the current packet after the QP enters the error state<\/p>\n<p>When do_complete() finds the QP in the error s<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-25964","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/25964","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=25964"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=25964"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=25964"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}