CVE-2026-98588 in Linux
Riassunto
di VulDB • 19/10/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
bpf, sockmap: Rifiuta max_entries > INT_MAX in sock_map_alloc
sock_map_alloc() rifiuta solo il caso in cui max_entries == 0 e consente altrimenti qualsiasi valore u32. Successivamente, sock_map_free() attraversa l'array sks[] con un iteratore di tipo int firmato:
int i; for (i = 0; i < stab->map.max_entries; i++) struct sock **psk = &stab->sks[i];
Quando viene creato un SOCKMAP con max_entries = 0xffffffff (UINT_MAX), l'allocazione di 32 GiB può avere successo su host con grande quantità di memoria. Durante la fase di liberazione, il contatore raggiunge 0x80000000, va in overflow fino a INT_MIN, viene esteso al segno da movslq e trasformato in un offset negativo di circa 16 GiB rispetto a stab->sks, puntando ben al di sotto dell'allocazione.
L'accesso che causa il fault è una scrittura tramite xchg() in sock_map_free(). Senza KASAN, la stessa scrittura fuori dai limiti può causare un fault su una pagina vmalloc non mappata o corrompere un'altra allocazione se tale indirizzo vmalloc risulta popolato. Su un kernel con KASAN e CONFIG_KASAN_VMALLOC=y, il controllo dell'ombra per quell'indirizzo rileva una pagina shadow non mappata generando prima un oops:
BUG: unable to handle page fault for address: fffff521b59c5a00 RIP: 0010:kasan_check_range+0x107/0x190 Call Trace: sock_map_free+0x93/0x190 map_create+0x68d/0xb30 __sys_bpf+0x21e/0x2e70
Il Vmcore ha confermato che stab->map.max_entries == 0xffffffff, stab->sks == 0xffffc911ace2d000 e l'indirizzo faulting sks + (s64)INT_MIN * 8 corrisponde esattamente a 0xffffc90dace2d000. Lo stesso percorso errato viene raggiunto nel normale percorso di chiusura/bpf_map_free_deferred() ogni volta che una tale mappa viene distrutta.
sock_map_alloc() limitava precedentemente la dimensione della sua allocazione tramite bpf_map_charge_init(), ma il limite è stato rimosso quando è stata eliminata la contabilità della memoria basata su rlimit. Si rifiuta max_entries > INT_MAX al momento della creazione in modo che l'iteratore firmato in sock_map_free() non veda mai un valore che causerebbe overflow.
Vulnerabilità attivata da syzkaller e riprodotta sia su un kernel KASAN basato sulla versione 6.6 sia sul kernel upstream v7.3-rc2.
If you want to get best quality of vulnerability data, you may have to visit VulDB.