CVE-2026-72491

net/9p: fix race condition on rdma->state in trans_rdma.c

State
Published
Severity
9.8 Critical
Published
Aug 15, 2026
Updated
Oct 16, 2026
Reserved
Aug 9, 2026

Read the record on cve.org

Description

In the Linux kernel, the following vulnerability has been resolved:

net/9p: fix race condition on rdma->state in trans_rdma.c

The rdma->state field is modified without holding req_lock in both recv_done() and p9_cm_event_handler(), while rdma_request() accesses the same field under the req_lock spinlock. This inconsistent locking creates a race condition:

- recv_done() running in softirq completion context sets rdma->state = P9_RDMA_FLUSHING without acquiring req_lock

- p9_cm_event_handler() modifies rdma->state at multiple points (ADDR_RESOLVED, ROUTE_RESOLVED, ESTABLISHED, CLOSED) without req_lock

- rdma_request() uses spin_lock_irqsave(&rdma->req_lock, flags) to protect the read-modify-write of rdma->state

The race can cause lost state transitions: recv_done() or the CM event handler could set state to FLUSHING/CLOSED while rdma_request() is concurrently checking or modifying state under the lock, leading to the FLUSHING transition being silently overwritten by CLOSING. This corrupts the connection state machine and can cause use-after-free on RDMA request objects during teardown.

Fix by adding req_lock protection to all rdma->state modifications in recv_done() and p9_cm_event_handler(), matching the pattern already used in rdma_request(). Use spin_lock_irqsave/spin_unlock_irqrestore in the CM event handler since it can race with recv_done() which runs in softirq context.

Tested with a kernel module that races two threads (simulating rdma_request and recv_done/CM handler) on rdma->state with proper locking: 5.5M+ FLUSHING writes over 27M iterations with 0 lost transitions.

Scores

CVSSScoreVectorSource
3.19.8 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HLinux

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 473c7dd1d7b59ff8f88a5154737e3eac78a96e5b to before 4cee2b8766045059d5e0b8114837b4a8efe827acAffected
  • 473c7dd1d7b59ff8f88a5154737e3eac78a96e5b to before 5424138848eb7d7d8a7196676e90a2cbf2142454Affected
  • 473c7dd1d7b59ff8f88a5154737e3eac78a96e5b to before 3970a19a80de530b801b6256354d4a529a9a2d6cAffected
  • 473c7dd1d7b59ff8f88a5154737e3eac78a96e5b to before 8aadc136d8e8d8fc95d7982d213cfe2234dfcf2bAffected
  • 473c7dd1d7b59ff8f88a5154737e3eac78a96e5b to before 151f8cf5b23d8a534d884432a82a6d54d5a61989Affected
  • 473c7dd1d7b59ff8f88a5154737e3eac78a96e5b to before 13bf9879b778b2f4b260b45bed18f31806120d1eAffected
  • 473c7dd1d7b59ff8f88a5154737e3eac78a96e5b to before ebbcbe5c0db215feecc17def06178da443f4eea6Affected
  • 473c7dd1d7b59ff8f88a5154737e3eac78a96e5b to before 7d54894a1ee265a72d70f7cae1da6cc774cccc71Affected
  • 3479b3c35e82ed10aa0ca2ee9e78c4eded06ba62Affected
  • c01ddaa54d7411e964ffd250c018d8469c5852f2Affected
  • 9e69c673fe077b8dc491cd8406c9bdcb1f76dee2Affected
  • e48e7e27e4dfd00c81e0381e7cee610cce021452Affected
  • 4.4.185 to before 4.5Affected
  • 4.9.185 to before 4.10Affected
  • 4.14.132 to before 4.15Affected
  • 4.19.57 to before 4.20Affected
LinuxLinux
  • 4.20Affected
  • before 4.20Not affected
  • 5.10.261 through 5.10.*Not affected
  • 5.15.212 through 5.15.*Not affected
  • 6.1.178 through 6.1.*Not affected
  • 6.6.145 through 6.6.*Not affected
  • 6.12.97 through 6.12.*Not affected
  • 6.18.40 through 6.18.*Not affected
  • 7.1.5 through 7.1.*Not affected
  • 7.2 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.