CVE-2026-31404 in Linux
Riassunto
di VulDB • 19/06/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
NFSD: Rimandare la pulizia degli oggetti secondari nei callback di export put
svc_export_put() chiama path_put() e auth_domain_put() immediatamente quando l'ultimo riferimento viene rilasciato, prima del periodo di grazia RCU. I lettori RCU in e_show() e c_show() accedono sia a ex_path (tramite seq_path/d_path) sia a ex_client->name (tramite seq_escape) senza detenere un riferimento. Se cache_clean rimuove la voce e rilascia l'ultimo riferimento in concorrenza, gli oggetti secondari vengono liberati mentre sono ancora in uso, causando un dereferenziamento di puntatore NULL in d_path.
Il commit 2530766492ec ("nfsd: fix UAF when access ex_uuid or ex_stats") ha spostato la kfree di ex_uuid ed ex_stats nel callback call_rcu, ma ha lasciato path_put() e auth_domain_put() in esecuzione prima del periodo di grazia poiché entrambi possono andare in sleep e i callback call_rcu vengono eseguiti nel contesto softirq.
Sostituire call_rcu/kfree_rcu con queue_rcu_work(), che rimanda il callback fino al termine del periodo di grazia RCU ed lo esegue nel contesto di processo dove il sleep è consentito. Ciò consente di spostare path_put() e auth_domain_put() nel callback differito insieme agli altri rilasci di risorse. Applicare la stessa correzione a expkey_put(), che presenta lo stesso pattern con ek_path ed ek_client.
Un workqueue dedicato delimita lo svuotamento dello shutdown ai soli elementi di lavoro di rilascio dell'export NFSD; lo svuotamento del system_unbound_wq condiviso causerebbe un blocco su lavoro non correlato di altri sottosistemi. nfsd_export_shutdown() utilizza rcu_barrier() seguito da flush_workqueue() per garantire che tutti i callback di rilascio differiti vengano completati prima che le cache di export vengano distrutte.
Reviwed-by: Jeff Layton <[email protected]>
If you want to get best quality of vulnerability data, you may have to visit VulDB.