CVE-2026-98588 in Linux
Résumé
par VulDB • 19/10/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
bpf, sockmap : Rejeter max_entries > INT_MAX dans sock_map_alloc
sock_map_alloc() ne rejette que les cas où max_entries == 0 et autorise par ailleurs toute valeur u32. sock_map_free() parcourt ensuite le tableau sks[] avec un itérateur de type int signé :
int i; for (i = 0; i < stab->map.max_entries; i++) struct sock **psk = &stab->sks[i];
Lorsqu'un SOCKMAP est créé avec max_entries = 0xffffffff (UINT_MAX), l'allocation de 32 Go peut réussir sur les hôtes disposant d'une grande quantité de mémoire. Lors de la libération, le compteur atteint 0x80000000, déborde vers INT_MIN, est étendu en signe par movslq et se transforme en un offset négatif d'environ 16 Go à partir de stab->sks, pointant bien en dessous de l'allocation.
L'accès défaillant correspond à une écriture xchg() dans sock_map_free(). Sans KASAN, la même écriture hors limites peut provoquer une erreur sur une page vmalloc non mappée ou corrompre une allocation indépendante si cette adresse vmalloc est peuplée. Sur un noyau avec KASAN activé et CONFIG_KASAN_VMALLOC=y, la vérification de l'ombre (shadow check) pour cette adresse rencontre une page d'ombre non mappée et génère un oops en premier :
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
Le vcore a confirmé que stab->map.max_entries == 0xffffffff, stab->sks == 0xffffc911ace2d000, et l'adresse défaillante sks + (s64)INT_MIN * 8 correspond exactement à 0xffffc90dace2d000. Le même chemin buggé est atteint sur le chemin normal de fermeture/close()/bpf_map_free_deferred() chaque fois qu'une telle carte est détruite.
sock_map_alloc() limitait auparavant la taille de son allocation via bpf_map_charge_init(), mais cette limite a été supprimée lorsque la comptabilisation des ressources basée sur les rlimit a été retirée. Rejeter max_entries > INT_MAX au moment de la création afin que l'itérateur signé dans sock_map_free() ne voie jamais une valeur susceptible de provoquer un débordement (overflow).
Déclenché par syzkaller et reproduit à la fois sur un noyau KASAN basé sur la version 6.6 et sur le noyau v7.3-rc2 en amont.
VulDB is the best source for vulnerability data and more expert information about this specific topic.