HIGH Introduced in 4.8
rxe WqeSge OOB
CVE-2026-92525
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H
KernelScan AI7.1HIGH
01Description
In the Linux kernel, the following vulnerability has been resolved: RDMA/rxe: Validate num_sge/cur_sge before indexing wqe->dma.sge[] For a user QP, qp->sq.queue is a ring the application writes directly, so rxe_post_send() takes the is_user branch and only schedules send_task without validating the WQE. rxe_requester() consumes it in place via req_next_wqe() and calls copy_data(), which indexes &wqe->dma.sge[cur_sge] with the attacker-controlled num_sge/cur_sge. Only the kernel path bounds num_sge (validate_send_wr()); the user WQE is never checked, so a local unprivileged user can post a WQE with an out-of-range cur_sge or oversized num_sge and force an out-of-bounds read of the per-WQE sge array in copy_data() (vmalloc OOB read, local DoS). Bound num_sge to qp->sq.max_sge in rxe_requester() before use, the way get_srq_wqe() already guards SRQ entries, and bound cur_sge only when the WQE carries payload (dma.resid): copy_data() returns early on a zero-length copy before touching dma->sge[], so a zero-payload WQE -- the only kind a max_sge == 0 QP can post -- stays valid. Reproduced under KASAN; the vmalloc-out-of-bounds in copy_data() is gone.
02KernelScan AI Analysis
Risk summary
A local unprivileged user with access to a Soft RoCE (RXE) RDMA device can trigger an out-of-bounds read in the kernel by posting a send request with invalid scatter-gather parameters. The bug causes a kernel crash (local denial of service) and may indirectly leak limited kernel memory. The rxe module must be loaded and an RDMA device configured by an administrator for the attack surface to exist.
Vulnerability analysis
In the Soft RoCE driver, work queue entries for user-mode queue pairs are written directly by the application into a shared memory ring without validation. When the kernel processes these entries, it uses the application-supplied scatter-gather count and index to access a fixed-size array, but never checks that these values are in range. A local user who can access an RXE RDMA device can post a send request with an out-of-range index or oversized count, forcing the kernel to read beyond the array bounds in vmalloc memory, which typically crashes the kernel. The fix adds bounds validation in the send processing path before the array is indexed, rejecting work entries whose scatter-gather parameters exceed the queue pair's configured limits. The vulnerability is reachable by any local user with access to an RDMA device, which requires the rxe module to be loaded and a device to be configured by an administrator.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 6.1 | 4.8 | 6.1.188 | 69d3ccf6543f |
| 6.12 | 4.8 | 6.12.110 | c067aa7b231e |
| 6.18 | 4.8 | 6.18.52 | 13cb7160e5b7 |
| 6.6 | 4.8 | 6.6.157 | 750bba6ce9bb |
| 7.2 | 4.8 | 7.2.6 | 5ec111ddc1f7 |
| mainline | 4.8 | 7.3 | 126c757e4cd4 |
| cip/6.1 | 4.8 | 6.1.189-cip61 | 69d3ccf6543f |
| cip/6.1-rt | 4.8 | 6.1.189-cip61-rt32 | 69d3ccf6543f |
| cip/6.12 | 4.8 | 6.12.111-cip32 | c067aa7b231e |
04CIP Kernels
State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.
| CIP tree | State |
|---|---|
| cip/6.12 | Fixed in 6.12.111-cip32 |
| cip/6.1 | Fixed in 6.1.189-cip61 |
| cip/6.1-rt | Fixed in 6.1.189-cip61-rt32 |
| cip/5.10 | Affected — no CIP fix yet (latest 5.10.271-cip78) |
| cip/5.10-rt | Affected — no CIP fix yet (latest 5.10.268-cip77-rt34) |
| cip/4.19 | Affected — no CIP fix yet (latest 4.19.325-cip136) |
| cip/4.19-rt | Affected — no CIP fix yet (latest 4.19.325-cip136-rt50) |