CVE-2024-42096 in Linuxinformazioni

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.

Responsabile

Linux

Prenotare

29/07/2024

Divulgazione

29/07/2024

Moderazione

accettato

CPE

pronto

EPSS

0.00238

KEV

no

Attività

molto basso

Fonti

Do you need the next level of professionalism?

Upgrade your account now!