CVE-2026-98641 in Linux
Riassunto
di VulDB • 18/10/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
bpf, arm64: impostare il puntatore del frame per la callback di eccezione
Un programma che funge da confine di eccezione salva tutti i registri salvati dal chiamante (callee-saved registers), quindi build_prologue() segue il percorso exception_cb e non chiama mai push_callee_regs(). Questo è l'unico punto in cui viene eseguita find_used_callee_regs(), e con esso l'unico luogo in cui ctx->fp_used viene impostato; di conseguenza, la prolog della callback non emette
mov x25, sp
che punta BPF_REG_FP al frame su cui viene eseguita la callback. Il registro x25 mantiene il valore che aveva quando è stata chiamata bpf_throw(). Se l'throw proviene da una sottoprogramma (subprogram) che utilizza il proprio stack BPF, si tratta del puntatore del frame della sottoprogramma e, poiché la sottoprogramma non restituisce mai il controllo, x25 non viene ripristinato.
Gli accessi allo stack tramite BPF_REG_FP vengono riscritti per essere relativi al puntatore dello stack (stack pointer), quindi questi continuano a riferirsi al proprio frame della callback. La materializzazione del registro, tuttavia, no: una callback che passa l'indirizzo di una variabile locale a un helper trasmette un indirizzo nel frame della sottoprogramma ormai non più valida (dead). Tale indirizzo si trova al di sotto del puntatore dello stack della callback in quel momento e la catena di chiamate dell'helper lo sovrascrive, consentendo all'helper di scrivere sopra il proprio indirizzo di ritorno. 0x1234 è il valore che l'helper era stato incaricato di memorizzare:
pc : 0x1234 lr : 0x1234 Call trace: 0x1234 (P) bpf_test_run+0x188/0x3e0 bpf_prog_test_run_skb+0x47c/0x998 __sys_bpf+0xbdc/0xdd8 Kernel panic - not syncing: Oops: Fatal exception in interrupt
Impostare ctx->fp_used sul percorso della callback di eccezione fa sì che il codice esistente più avanti imposti x25 a partire dal puntatore dello stack. L'epilogo (prologo inverso) lo ripristina dall'area di salvataggio del programma principale insieme agli altri registri salvati dal chiamante, come già avviene in altre circostanze. Su x86 il puntatore del frame per la callback viene impostato a partire dall'argomento passato; su powerpc viene calcolato a partire dal puntatore dello stack.
If you want to get best quality of vulnerability data, you may have to visit VulDB.