{"id":21462,"date":"2026-09-12T04:31:13","date_gmt":"2026-09-11T20:31:13","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89540"},"modified":"2026-09-12T04:31:13","modified_gmt":"2026-09-11T20:31:13","slug":"cve-2026-89540","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89540","title":{"rendered":"CVE-2026-89540 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nsunrpc: init gssp_loc"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>sunrpc: init gssp_lock before publishing proc entry<\/p>\n<p>create_use_gss_proxy_proc_entry() publishes \/proc\/net\/rpc\/use-gss-proxy<br \/>\nvia proc_create_data() before init_gssp_clnt() runs mutex_init() on<br \/>\nsn-&gt;gssp_lock.  Once the dentry is linked under proc_subdir_lock it is<br \/>\nimmediately reachable from userspace, so a write that lands in the<br \/>\nwindow drives set_gssp_clnt() into mutex_lock() on a zero-initialized<br \/>\nstruct mutex.<\/p>\n<p>    create_use_gss_proxy_proc_entry(net)<br \/>\n      proc_create_data(&#8220;use-gss-proxy&#8221;, &#8230;)   \/* dentry live *\/<br \/>\n      init_gssp_clnt(sn)<br \/>\n        mutex_init(&amp;sn-&gt;gssp_lock)             \/* too late *\/<\/p>\n<p>    write_gssp()<br \/>\n      set_gssp_clnt(net)<br \/>\n        mutex_lock(&amp;sn-&gt;gssp_lock)             \/* uninitialized *\/<br \/>\n        gssp_rpc_create(&#8230;)<br \/>\n        sn-&gt;gssp_clnt = clnt<br \/>\n        mutex_unlock(&amp;sn-&gt;gssp_lock)<\/p>\n<p>The window spans only the two statements between proc_create_data()<br \/>\nreturning and init_gssp_clnt(), so a writer reaches it only if the<br \/>\nregistering thread is preempted there while another task is already<br \/>\nopening the freshly published file.  register_pernet_subsys() runs in<br \/>\npreemptible context under pernet_ops_rwsem, so that preemption is<br \/>\npossible, and the window widens on auth_rpcgss module load, when the<br \/>\nproc entry is created for every live net namespace whose tasks are<br \/>\nalready running.  A writer that wins the race locks a zero-filled<br \/>\nstruct mutex.  On CONFIG_DEBUG_MUTEXES the missing magic value trips a<br \/>\n&#8220;lock used without init&#8221; splat; on a production kernel the fast path<br \/>\nacquires the lock via CMPXCHG(owner, 0, current).  In the latter case<br \/>\na second writer that arrives before init_gssp_clnt() re-zeroes owner<br \/>\ncan enter set_gssp_clnt() concurrently, shut down the first writer&#8217;s<br \/>\nclnt while it is still in use, and leak the loser&#8217;s clnt.<\/p>\n<p>Fix by initializing sn-&gt;gssp_lock in sunrpc_init_net() so its lifetime<br \/>\nmatches the sunrpc_net it lives in.  sn-&gt;gssp_clnt is already NULL from<br \/>\nthe kzalloc that backs net_generic storage, so the lazy helper is no<br \/>\nlonger needed; drop init_gssp_clnt(), its prototype, and the call from<br \/>\ncreate_use_gss_proxy_proc_entry().  sunrpc.ko is a build-time<br \/>\ndependency of auth_rpcgss.ko, so sunrpc_init_net() has always run on<br \/>\nevery netns before any auth_gss pernet init can publish the proc<br \/>\nentry.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>sunrpc: init gssp_lock before publishing proc entry<\/p>\n<p>create_use_gss_proxy_proc_entry() publishes \/proc\/net\/rpc\/use-gss-proxy<br \/>\nvia pr<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-21462","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/21462","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=21462"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21462"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21462"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}