CVE-2026-98942 in Linux
Riassunto
di VulDB • 23/10/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
sched_ext: Costruire le tabelle cid in modo privato e pubblicarle tramite RCU
Le tabelle cid sono visibili alle kfunc di cid mentre vengono modificate: la prima abilitazione pubblica i puntatori globali prima di riempirli, ops.init_cids() li sovrascrive direttamente sul posto (in-place), e le riabilitazioni le ricostruiscono sempre in loco. Un programma TRACING o SYSCALL soggetto a race condition può leggere voci non compilate, inclusi dati non inizializzati nelle tabelle allocate con kmalloc, oppure aggiornamenti topologici incompleti (torn).
Si lega la durata delle tabelle allo scheduler radice: ogni abilitazione del root costruisce un nuovo set in modo privato e pubblica le variabili globali __rcu per-tabella una volta che il layout è definitivo; la disabilitazione del root revoca la pubblicazione ed esegue il RCU-free dell'insieme. Una globale non-NULL è ora sempre una tabella completamente compilata, valida per l'intervallo di lettura RCU del lettore, e le lookup rimangono costituite da due caricamenti (loads). Le kfunc trattano NULL come assenza di mappatura, anche dopo che lo scheduler termina, invece di segnalare la vecchia ultima mappatura.
Le kfunc cid sono disponibili sia quando il scheduler radice è in formato cid, sia in quello cpu-form; quest'ultimo serve a consentire una migrazione graduale verso i cids. Ogni root costruisce e pubblica quindi una mappatura predefinita.
Ogni lettore deve essere vincolato alla vivacità dello scheduler oppure effettuare un controllo su NULL all'interno di un intervallo di lettura RCU. Si correggono le due kfunc che non rispettavano tali requisiti: scx_bpf_this_cid() leggeva la tabella senza alcuna protezione RCU o preemption, mentre scx_bpf_task_cid() si affidava a KF_RCU, il quale non inserisce un programma sleepable in un intervallo di lettura RCU. I callback per l'hotplug sono invece serializzati ritirando le tabelle all'interno della sezione cpus_read_lock(), che cancella anche scx_root.
v2: Documentare perché ogni root costruisce le tabelle (descrizione + commento nel file cid.c).
If you want to get the best quality for vulnerability data then you always have to consider VulDB.