CVE-2026-98588
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
bpf, sockmap: Odrzuć max_entries > INT_MAX w sock_map_alloc
sock_map_alloc() odrzuca tylko max_entries == 0, a poza tym zezwala na dowolne
wartość u32. sock_map_free() następnie przegląda tablicę sks[] ze znakiem int
iterator:
int i;
for (i = 0; i < stab->map.max_entries; i++)
struct skarpetka **psk = &stab->sks[i];
Kiedy tworzony jest SOCKMAP z max_entries = 0xffffffff (UINT_MAX),
alokacja 32 GiB może się powieść na hostach z dużą pamięcią. W czasie wolnym
licznik osiąga 0x80000000, zawija się do INT_MIN, jest przedłużany o znak przez movslq
i zamienił się w ujemne przesunięcie ~16 GiB od stab->sks, wskazując daleko
poniżej przydziału.
Dostęp powodujący błąd to zapis xchg() w sock_map_free(). Bez
KASAN, ten sam zapis poza zakresem może spowodować błąd na niezamapowanej stronie vmalloc
lub uszkodzi niepowiązaną alokację, jeśli adres vmalloc zostanie zapełniony.
W jądrze KASAN z CONFIG_KASAN_VMALLOC=y sprawdzanie cienia
adres trafia na niezamapowaną stronę cienia i najpierw wykonuje oops:
BŁĄD: nie można obsłużyć błędu strony dla adresu: fffff521b59c5a00
RIP: 0010:kasan_check_range+0x107/0x190
Zadzwoń do śledzenia:
skarpetka_map_free+0x93/0x190
map_create+0x68d/0xb30
__sys_bpf+0x21e/0x2e70
Vmcore potwierdzony stab->map.max_entries == 0xffffffff, stab->sks ==
0xffffc911ace2d000 i adres powodujący błąd sks + (s64)INT_MIN * 8
dokładnie o 0xffffc90dace2d000. Do tej samej ścieżki dla buggy dochodzi się na
normalna ścieżka zamknięcia()/bpf_map_free_deferred() zawsze, gdy taka mapa jest
zniszczone.
sock_map_alloc() używana do ograniczania rozmiaru alokacji
bpf_map_charge_init(), ale powiązanie zostało usunięte, gdy pamięć oparta na rlimitach
usunięto księgowość. Odrzuć max_entries > INT_MAX w czasie tworzenia, więc
iterator ze znakiem w sock_map_free() nigdy nie widzi wartości, która by to zrobiła
przepełnienie.
Wywoływane przez syzkaller i odtwarzane zarówno w jądrze KASAN opartym na wersji 6.6
oraz jądro starszej wersji 7.3-rc2.
>_ Referencje
- https://git.kernel.org/stable/c/814a81c842bd88f6bd8a4ce550d560df071a5d03
- https://git.kernel.org/stable/c/909f761868fda329dc69130ef9eb5b5795bcdf00
- https://git.kernel.org/stable/c/ba7d627dbc67d62df2fa66d7b41e743c3ace0ec8
- https://git.kernel.org/stable/c/c56191af3a578b9cc265fa3bd5fc0752c59c1781
- https://git.kernel.org/stable/c/cc70972ddbf0e3398f2f32624d31db78594d50d8
- https://git.kernel.org/stable/c/cea597519b9ca6d691c98d92460ead8ece2a07af
- https://git.kernel.org/stable/c/f4a73f49e256bd835368504462be3b57b03febff
Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.
This product uses the NVD API but is not endorsed or certified by the NVD.
Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.
CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.
NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org