HIGH
xprtrdma ReceiveQueue Hang
CVE-2026-43469
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: xprtrdma: Decrement re_receiving on the early exit paths In the event that rpcrdma_post_recvs() fails to create a work request (due to memory allocation failure, say) or otherwise exits early, we should decrement ep->re_receiving before returning. Otherwise we will hang in rpcrdma_xprt_drain() as re_receiving will never reach zero and the completion will never be triggered. On a system with high memory pressure, this can appear as the following hung task: INFO: task kworker/u385:17:8393 blocked for more than 122 seconds. Tainted: G S E 6.19.0 #3 "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. task:kworker/u385:17 state:D stack:0 pid:8393 tgid:8393 ppid:2 task_flags:0x4248060 flags:0x00080000 Workqueue: xprtiod xprt_autoclose [sunrpc] Call Trace: <TASK> __schedule+0x48b/0x18b0 ? ib_post_send_mad+0x247/0xae0 [ib_core] schedule+0x27/0xf0 schedule_timeout+0x104/0x110 __wait_for_common+0x98/0x180 ? __pfx_schedule_timeout+0x10/0x10 wait_for_completion+0x24/0x40 rpcrdma_xprt_disconnect+0x444/0x460 [rpcrdma] xprt_rdma_close+0x12/0x40 [rpcrdma] xprt_autoclose+0x5f/0x120 [sunrpc] process_one_work+0x191/0x3e0 worker_thread+0x2e3/0x420 ? __pfx_worker_thread+0x10/0x10 kthread+0x10d/0x230 ? __pfx_kthread+0x10/0x10 ret_from_fork+0x273/0x2b0 ? __pfx_kthread+0x10/0x10 ret_from_fork_asm+0x1a/0x30
02KernelScan AI Analysis
Risk summary
Systems using NFS over RDMA under memory pressure can experience indefinite hangs during transport disconnection. This affects NFS clients and servers using RDMA transport, potentially causing service unavailability when memory allocation failures occur during receive queue operations.
Vulnerability analysis
The vulnerability stems from a race condition in the RDMA transport's receive queue management. When rpcrdma_post_recvs() fails early due to memory allocation failure or other conditions, it exits without decrementing the ep->re_receiving counter that was incremented at function entry. This leaves the counter permanently elevated, causing rpcrdma_xprt_drain() to wait indefinitely for re_receiving to reach zero during transport shutdown. The fix adds proper cleanup on early exit paths by decrementing the counter before returning, ensuring the drain operation can complete normally.
03Fix Versions
| Branch | Fixed in | Patch commit |
|---|---|---|
| 5.15 | 5.15.203 | 7ea69259a60a |
| 6.1 | 6.1.167 | 8cb6b5d8296b |
| 6.12 | 6.12.78 | 49f53ee4e252 |
| 6.18 | 6.18.19 | 8127b5fec047 |
| 6.19 | 6.19.9 | dc3ebd7e2d73 |
| 6.6 | 6.6.130 | 74c39a47856b |
| mainline | 7.0 | 7b6275c80a0c |