PT-2026-90256 · Linux · Linux

CVE-2026-89540

·

Published

2026-09-11

·

Updated

2026-09-11

None

No severity ratings or metrics are available. When they are, we'll update the corresponding info on the page.
In the Linux kernel, the following vulnerability has been resolved:
sunrpc: init gssp lock before publishing proc entry
create use gss proxy proc entry() publishes /proc/net/rpc/use-gss-proxy via proc create data() before init gssp clnt() runs mutex init() on sn->gssp lock. Once the dentry is linked under proc subdir lock it is immediately reachable from userspace, so a write that lands in the window drives set gssp clnt() into mutex lock() on a zero-initialized struct mutex.
create use gss proxy proc entry(net) proc create data("use-gss-proxy", ...) /* dentry live / init gssp clnt(sn) mutex init(&sn->gssp lock) / too late */
write gssp() set gssp clnt(net) mutex lock(&sn->gssp lock) /* uninitialized */ gssp rpc create(...) sn->gssp clnt = clnt mutex unlock(&sn->gssp lock)
The window spans only the two statements between proc create data() returning and init gssp clnt(), so a writer reaches it only if the registering thread is preempted there while another task is already opening the freshly published file. register pernet subsys() runs in preemptible context under pernet ops rwsem, so that preemption is possible, and the window widens on auth rpcgss module load, when the proc entry is created for every live net namespace whose tasks are already running. A writer that wins the race locks a zero-filled struct mutex. On CONFIG DEBUG MUTEXES the missing magic value trips a "lock used without init" splat; on a production kernel the fast path acquires the lock via CMPXCHG(owner, 0, current). In the latter case a second writer that arrives before init gssp clnt() re-zeroes owner can enter set gssp clnt() concurrently, shut down the first writer's clnt while it is still in use, and leak the loser's clnt.
Fix by initializing sn->gssp lock in sunrpc init net() so its lifetime matches the sunrpc net it lives in. sn->gssp clnt is already NULL from the kzalloc that backs net generic storage, so the lazy helper is no longer needed; drop init gssp clnt(), its prototype, and the call from create use gss proxy proc entry(). sunrpc.ko is a build-time dependency of auth rpcgss.ko, so sunrpc init net() has always run on every netns before any auth gss pernet init can publish the proc entry.
Found an issue in the description? Have something to add? Feel free to write us 👾

Related Identifiers

CVE-2026-89540

Affected Products

Linux