CVE-2026-97903 in Linuxinformazioni

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.

Responsabile

Linux

Prenotare

25/09/2026

Divulgazione

25/09/2026

Moderazione

accettato

CPE

pronto

EPSS

0.00000

KEV

no

Attività

molto basso

Fonti

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!