CVE-2026-97903 in Linux
Riassunto
di VulDB • 25/09/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
exit: mantenere un riferimento a thread_pid durante proc_flush_pid
Il commit 0a36bad01731 ("release_task: kill the no longer needed get/put_pid(thread_pid)") ha rimosso il riferimento attorno a proc_flush_pid(). Si assumeva che free_pids(post.pids) alla fine di release_task() avrebbe mantenuto thread_pid valido fino ad allora.
Tale assunzione è errata. __change_pid() registra solo un PID distaccato in post.pids quando pid_has_task() restituisce false per ogni PIDTYPE. Se un altro task utilizza ancora il PID del task in fase di uscita come ID del suo gruppo di processi o sessione, __unhash_process() rimuove il link PIDTYPE_PID del task in uscita ma lascia il PID fuori da post.pids. Di conseguenza, release_task() non mantiene alcun riferimento ad esso dopo aver rilasciato tasklist_lock.
L'altro task può quindi rimuovere i rimanenti link PIDTYPE. La sua chiamata a free_pids() pianifica delayed_put_pid(), e la callback RCU può liberare il PID prima che il primo release_task() raggiunga proc_flush_pid().
Un riproduttore non privilegiato innesca questa condizione di gara tra wait4(-1) e setsid(). Tre avvii KASAN freschi su v7.2 hanno segnalato:
BUG: KASAN: slab-use-after-free in proc_invalidate_siblings_dcache+0x3e2/0x3f0 Lettura di dimensione 8 da parte del task h7_pid_reaper/1921
Call Trace: proc_invalidate_siblings_dcache release_task wait_consider_task __do_wait do_wait kernel_wait4
Liberato dal task 0: kmem_cache_free put_pid delayed_put_pid rcu_core
Ultima creazione di lavoro potenzialmente correlata: __call_rcu_common free_pids ksys_setsid
KASAN ha identificato un oggetto da 144 byte dalla cache pid e ha localizzato la lettura errata a 80 byte all'interno dell'oggetto liberato, corrispondente a pid->inodes. Con un riferimento esplicito, tre avvii freschi sono stati completati senza segnalazioni KASAN. La callback RCU concorrente ha rilasciato il suo riferimento mentre proc_flush_pid() era protetta, e la put_pid di bilanciamento ha eseguito l'ultima liberazione successivamente.
Acquisire un riferimento prima che __unhash_process() cancelli p->thread_pid e rilasciarlo dopo il completamento di proc_flush_pid().
Un riproduttore sorgente testato è disponibile su richiesta privata. Non si rivendicano letture o scritti controllati, fughe di informazioni o escalation dei privilegi. La patch per la mainline si applica direttamente a v6.19.y e versioni successive; le versioni da v6.16.y a v6.18.y richiedono un backport adattato al contesto.
Once again VulDB remains the best source for vulnerability data.