CVE-2026-93107
High · 8.2CVSS
8.2
EPSS
0.5%
Published
Sep 17, 2026
CISA due date
—
Cloudanix analysis
A flaw in Linux RDMA networking code can cause the same network message to be delivered many times or crash the system when a connection is interrupted at the wrong moment.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Race Condition
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Race condition in RDMA/rxe responder state machine allows re-execution of an already-completed packet when a QP transitions to error state during receive processing, producing duplicate IB_WC_SUCCESS completions and eventually dereferencing a NULL WQE pointer in send_data_in/copy_data.
Why it matters to the business
Systems using RDMA over Ethernet or InfiniBand may experience kernel crashes, repeated delivery of the same message to user-space applications, and corruption of exactly-once semantics for RC connections, leading to application failures and potential data integrity issues in high-performance networking workloads.
How an attack unfolds
An attacker triggers a QP error state transition (for example via rdma_cm disconnect) while the responder is processing a packet; the state machine then loops, re-invoking execute/send_data_in on the same packet for every posted receive WQE until the receive queue is exhausted and a NULL dereference occurs.
How to fix it
Apply the upstream fix that returns RESPST_CLEANUP instead of RESPST_CHK_RESOURCE for a live packet that has already been completed; rebuild and deploy the patched kernel on all systems running the affected RDMA/rxe code.
How to confirm the fix worked
Confirm the presence of the corrected error-state handling logic in rxe_resp.c (check for the RESPST_CLEANUP return path) and verify that duplicate completions no longer occur under concurrent error-state transitions during stress testing.
Typical attack path
- Establish RDMA RC connection to target QP
- Race an error-state transition (disconnect or local error) against an in-flight receive
- Trigger repeated reprocessing of the same SEND packet via the flawed do_complete path
- Exhaust receive queue and cause NULL pointer dereference in copy_data
How to detect it
Search kernel logs for NULL pointer dereference oops in copy_data+0x29/0x1f0 or send_data_in during rxe_wq activity, and inspect RDMA ULPs for unexpected duplicate message deliveries or repeated identical completions under error conditions.
- BUG: kernel NULL pointer dereference, address: 0000000000000014
- RIP: copy_data+0x29/0x1f0
- Workqueue: rxe_wq do_work
- Call Trace: send_data_in+0x25/0x50 rxe_receiver+0xf36/0x1dd0
What your security team should do
- Prioritize patching kernel packages containing the RDMA/rxe fix as soon as vendor updates are available
- Monitor for kernel oops reports referencing copy_data or send_data_in in the rxe_wq workqueue
- Restrict RDMA exposure to trusted networks until patches are deployed
The record
In the Linux kernel, the following vulnerability has been resolved: RDMA/rxe: Avoid reprocessing the current packet after the QP enters the error state When do_complete() finds the QP in the error state it returns RESPST_CHK_RESOURCE. Before commit 49dc9c1f0c7e ("RDMA/rxe: Cleanup reset state handling in rxe_resp.c") this was the flush loop: check_resource() had an error-state branch that fetched each remaining recv WQE and completed it with IB_WC_WR_FLUSH_ERR, without touching the current packet. That commit removed the error-state branch from check_resource() (draining is now done at rxe_receiver() entry) but kept the do_complete() error-state return. As a result, when a QP moves to the error state while a packet is being completed - e.g. an rdma_cm disconnect racing with receive processing - the responder state machine loops back into the request processing chain with the already-completed packet still in hand: check_resource() fetches a fresh recv WQE, execute()/send_data_in() copies the same packet payload again, do_complete() posts another IB_WC_SUCCESS CQE (qp->resp.status is still 0), and control returns to the error-state check. The loop re-executes the same packet once per posted recv WQE (observed: ~1000 duplicate IB_WC_SUCCESS completions of one SEND, one per ~8us, matching the RQ occupancy) until the RQ is exhausted, after which qp->resp.wqe is NULL and send_data_in() dereferences it: BUG: kernel NULL pointer dereference, address: 0000000000000014 Workqueue: rxe_wq do_work RIP: copy_data+0x29/0x1f0 Call Trace: send_data_in+0x25/0x50 rxe_receiver+0xf36/0x1dd0 The duplicate completions are indistinguishable from real receives to the ULP. During an rds stress test, the message was accepted as new and delivered the same datagram to user space hundreds of times, corrupting the stream; any ULP that relies on RC exactly-once delivery is affected. A live packet reaching the error-state check in do_complete() has been executed and completed exactly once and must be consumed, not re-processed. Return RESPST_CLEANUP for it (dequeue and free); keep returning RESPST_CHK_RESOURCE for the pkt == NULL case.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|