Bug 2545966 (CVE-2026-105517) - CVE-2026-105517 nfs-ganesha: nfs-ganesha: 9P TWRITE/TCLUNK race condition use-after-free
Summary: CVE-2026-105517 nfs-ganesha: nfs-ganesha: 9P TWRITE/TCLUNK race condition use...
Keywords:
Status: NEW
Alias: CVE-2026-105517
Product: Security Response
Classification: Other
Component: vulnerability
Version: unspecified
Hardware: All
OS: Linux
high
high
Target Milestone: ---
Assignee: Product Security DevOps Team
QA Contact:
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2026-10-05 16:05 UTC by OSIDB Bzimport
Modified: 2026-10-05 16:24 UTC (History)
10 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed:
Embargoed:


Attachments (Terms of Use)

Description OSIDB Bzimport 2026-10-05 16:05:48 UTC
Source code review of nfs-ganesha V15.6 (9P code identical to reported V15.2, zero diff on affected files).

Vulnerability confirmed by code analysis.

Race condition between concurrent 9P workers on the same FID with no per-FID locking:

- TWRITE path (src/Protocols/9P/9p_write.c:80): reads pfid from the connection FID table, then at line 100–111 accesses pfid->xattr and performs memcpy(pfid->xattr->xattr_content + offset, attacker_data, size).
- TCLUNK path (src/Protocols/9P/9p_clunk.c:63–74): reads the same pfid, calls _9p_tools_clunk(pfid) which calls free_fid() (src/Protocols/9P/9p_proto_tools.c:314), freeing pfid->xattr (line 349) and pfid itself (line 350), then sets fids[fid] = NULL (line 74).

A concurrent TWRITE worker that already holds the pfid pointer continues to memcpy attacker-controlled network data through the stale xattr pointer into freed heap memory. The fids[fid] = NULL in TCLUNK does not help — the writer already resolved the pointer. There is zero synchronization on FID lifetime.

Pre-auth: same as the TWALK issue — TAUTH returns EOPNOTSUPP unconditionally, SecType is irrelevant for 9P.

Reporter claims progression from UAF to instruction-pointer control and end-to-end RCE. The code supports this: the attacker controls the memcpy source data (network payload), the copy size (xattr allocation size set via TXATTRCREATE), and the target offset.

Upstream confirmed; same remediation path (9P removal).


Note You need to log in before you can comment on or make changes to this bug.