CVE-2026-98588 in Linuxinfo

Zusammenfassung

von VulDB • 19.10.2026

Im Linux-Kernel wurde folgende Schwachstelle behoben:

bpf, sockmap: Ablehnung von max_entries > INT_MAX in sock_map_alloc

sock_map_alloc() lehnt nur den Fall max_entries == 0 ab und erlaubt ansonsten jeden u32-Wert. sock_map_free() durchläuft dann das sks[]-Array mit einem Iterator vom Typ signed int:

int i; for (i = 0; i < stab->map.max_entries; i++) struct sock **psk = &stab->sks[i];

Wenn ein SOCKMAP mit max_entries = 0xffffffff (UINT_MAX) erstellt wird, kann die Allokation von 32 GiB auf Systemen mit großem Arbeitsspeicher erfolgreich sein. Beim Freigeben erreicht der Zähler den Wert 0x80000000, überläuft zu INT_MIN, wird durch movslq vorzeichenverlängert und ergibt einen negativen Offset von ~16 GiB relativ zu stab->sks, was weit unterhalb des allokierten Bereichs zeigt.

Der fehlerhafte Zugriff ist ein xchg()-Schreibvorgang in sock_map_free(). Ohne KASAN kann derselbe Out-of-Bounds-Schreibzugriff auf einer nicht zugewiesenen vmalloc-Seite einen Fault auslösen oder eine unabhängige Allokation beschädigen, wenn diese vmalloc-Adresse belegt ist. Auf einem KASAN-Kernel mit CONFIG_KASAN_VMALLOC=y trifft die Schattenprüfungslogik (shadow check) für diese Adresse auf eine nicht zugewiesene Shadow-Seite und löst zunächst einen Oops aus:

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

Ein Vmcore bestätigte, dass stab->map.max_entries == 0xffffffff und stab->sks == 0xffffc911ace2d000 war, sowie die fehlerhafte Adresse sks + (s64)INT_MIN * 8 genau bei 0xffffc90dace2d000 lag. Der gleiche fehlerhafte Pfad wird auf dem normalen close()/bpf_map_free_deferred()-Pfad immer dann erreicht, wenn eine solche Map zerstört wird.

sock_map_alloc() begrenzte zuvor seine Allokationsgröße durch bpf_map_charge_init(), aber diese Begrenzung wurde aufgehoben, als die rlimit-basierte Speicherbuchhaltung entfernt wurde. Es sollte max_entries > INT_MAX zum Erstellungszeitpunkt abgelehnt werden, damit der signed-Iterator in sock_map_free() niemals einen Wert sieht, der zu einem Überlauf führt.

Ausgelöst durch syzkaller und reproduziert auf beiden einem 6.6-basierten KASAN-Kernel sowie dem upstream v7.3-rc2-Kernel.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Zuständig

Linux

Reservieren

25.09.2026

Veröffentlichung

18.10.2026

Moderieren

akzeptiert

Eintrag

VDB-422091

EPSS

0.00205

KEV

nein

Aktivitäten

very low

Quellen

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!