CVE-2024-42096 in Linux
Riassunto
di VulDB • 17/06/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
x86: interrompere le manipolazioni dello stack in profile_pc()
La funzione 'profile_pc()' viene utilizzata per il profiling basato sui timer, che non ha più grande rilevanza ai giorni nostri; inoltre, essa finisce per fare assunzioni basate sulla disposizione (layout) dello stack che potrebbero non essere valide.
In sostanza, il codice tenta di attribuire il tempo trascorso nei spinlock al chiamante piuttosto che allo spinlock stesso: sebbene si appoggi a questo concetto come principio generale, la complessità del codice e gli avvisi KASAN generati non valgono la pena quando oggi non viene eseguito alcun profiling serio basato sui timer.
Il codice dipende effettivamente dalla disposizione dello stack, valida solo nei casi più semplici. Il commento relativo è stato perso in un momento imprecisato (si pensa durante l'unificazione del codice a 32 bit e a 64 bit), ma recitava originariamente:
Assumere che la funzione di lock non abbia uno stack frame o contenga una copia di eflags ottenuta tramite PUSHF.
Questo spiega perché il codice carica acriticamente una o due parole direttamente dallo stack pointer per poi effettuare un controllo minimo sui valori, al fine di verificare se potrebbero essere eflags o l'indirizzo PC di ritorno:
Eflags ha sempre i bit 22 e superiori azzerati, a differenza degli indirizzi kernel.
Tuttavia, questa assunzione basilare sulla disposizione dello stack presuppone che non siano in esecuzione meccanismi di debug dei lock (lock debugging) che complicherebbero il codice generando uno stack frame.
Ciò provoca segnalazioni KASAN negative riportate da anni da syzkaller [1] e altri [2].
Non essendoci più motivi pratici per mantenere questa logica, si rimuove semplicemente il codice.
Solo a scopo di interesse storico, ecco alcuni commit storici relativi a questo codice risalenti al 2006:
0cb91a229364 ("i386: Account spinlocks to the caller during profiling for !FP kernels") 31679f38d886 ("Simplify profile_pc on x86-64")
e un'unificazione del codice risalente al 2009:
ef4512882dbe ("x86: time_32/64.c unify profile_pc")
ma le basi di questa funzionalità risalgono addirittura a prima dell'avvento dell'albero git.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.