HIGH Introduced in 4.8
nvmet-rdma Response Leak
CVE-2026-93151
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
KernelScan AI6.5MEDIUM
01Description
In the Linux kernel, the following vulnerability has been resolved: nvmet-rdma: fix response resource leak on queue teardown When an nvme target with rdma transport is removed while I/Os are in flight, a response can be posted but its send completion is never delivered before the connection is torn down. As a result nvmet_rdma_send_done() and nvmet_rdma_release_rsp() are never called for the response, and this leaks the allocated RDMA read/write context and request SGLs. These leaks are recreated by running blktests nvme/061 with the rdma transport and the siw driver. Kernel kmemleak feature reports them as follows: unreferenced object 0xffff88812bc490c0 (size 32): comm "kworker/2:1H", pid 409, jiffies 4307744490 backtrace (crc 89afd339): __kmalloc_noprof+0x5f9/0x890 sgl_alloc_order+0x7b/0x380 nvmet_req_alloc_sgls+0x290/0x4f0 [nvmet] nvmet_rdma_map_sgl_keyed+0x241/0x12e0 [nvmet_rdma] nvmet_rdma_handle_command+0x73e/0xb80 [nvmet_rdma] __ib_process_cq+0x149/0x4c0 [ib_core] ib_cq_poll_work+0x49/0x160 [ib_core] process_one_work+0x8b2/0x1640 worker_thread+0x5fd/0xfe0 kthread+0x367/0x460 ret_from_fork+0x655/0x9d0 ret_from_fork_asm+0x1a/0x30 unreferenced object 0xffff88814bd05e80 (size 64): comm "kworker/3:1H", pid 148, jiffies 4295195428 backtrace (crc e35510cb): __kmalloc_noprof+0x5f9/0x890 rdma_rw_ctx_init+0x333/0x1fa0 [ib_core] nvmet_rdma_map_sgl_keyed+0x5c8/0x12e0 [nvmet_rdma] nvmet_rdma_handle_command+0x73e/0xb80 [nvmet_rdma] __ib_process_cq+0x149/0x4c0 [ib_core] ib_cq_poll_work+0x49/0x160 [ib_core] process_one_work+0x8b2/0x1640 worker_thread+0x5fd/0xfe0 kthread+0x367/0x460 ret_from_fork+0x655/0x9d0 ret_from_fork_asm+0x1a/0x30 To avoid the memory leaks, reclaim the memory of the in-flight responses when the queue QP is torn down. Call nvmet_rdma_free_rsp_resources() that frees up the RDMA read/write context and the request SGLs of such responses.
02KernelScan AI Analysis
Risk summary
Systems configured as NVMe over Fabrics RDMA targets leak kernel memory when a remote initiator disconnects while I/O is in flight. Each teardown cycle leaks RDMA contexts and scatter-gather lists, which can accumulate and drive the system toward OOM with repeated connections. Any host on the RDMA fabric can trigger this without credentials on the target.
Vulnerability analysis
When an NVMe over Fabrics RDMA target is removed or a remote initiator disconnects while I/O operations are in flight, the queue teardown path drains the queue pair but does not reclaim resources for responses whose send completions were never delivered. This leaves allocated RDMA read/write contexts and request scatter-gather lists unreferenced in kernel memory, accumulating with each repeated connection-and-disconnect cycle. The fix iterates over all in-flight responses during queue destruction and explicitly frees their associated resources before the queue pair is destroyed. A remote NVMe initiator on the same RDMA fabric can trigger this by connecting, issuing I/O, and disconnecting abruptly, requiring no privileges on the target system; the target must have RDMA hardware or a software RDMA driver and be configured to export NVMe over Fabrics.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 5.15 | 4.8 | 5.15.221 | 91cfa74f1f37 |
| 6.1 | 4.8 | 6.1.188 | 156ec10a8be2 |
| 6.12 | 4.8 | 6.12.110 | 5cc3b21729d4 |
| 6.18 | 4.8 | 6.18.52 | ca795fc1d8a1 |
| 6.6 | 4.8 | 6.6.157 | 9584b3c30e4e |
| 7.2 | 4.8 | 7.2.6 | d553a9dc1c45 |
| mainline | 4.8 | 7.3 | 0114dd303b37 |
| cip/6.1 | 4.8 | 6.1.189-cip61 | 156ec10a8be2 |
| cip/6.1-rt | 4.8 | 6.1.189-cip61-rt32 | 156ec10a8be2 |
| cip/6.12 | 4.8 | 6.12.111-cip32 | 5cc3b21729d4 |
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) |