CVE-2026-98884
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
mmc: core: Dodaj weryfikację dla dostarczonych przez hosta max_segs
Pole max_segs jest typu unsigned short i jeśli jest to sterownik hosta
ustawi zbyt dużą wartość, może zostać obcięta do zera. To
może spowodować, że mmc_alloc_sg() wywoła kmalloc_objs() z zerowym rozmiarem
żądanie alokacji, co prowadzi do niezdefiniowanego zachowania.
W alokatorze SLUB kmalloc(0) zwraca specjalny wskaźnik
(ZERO_SIZE_PTR). Kolejne sprawdzenie „if (sg)” zakończy się wynikiem
true, a funkcja sg_init_table() spróbuje uzyskać dostęp do nieprawidłowej pamięci,
co spowodowało awarię:
dwmmc_rockchip 2a310000.mmc: Pomyślnie dostrojono fazę do 133
mmc1: nowa karta SDHC UHS-I speed SDR104 pod adresem aaaa
Nie można obsłużyć żądania stronicowania jądra pod adresem wirtualnym 0000001ffffffff0
Informacje o przerwaniu pamięci:
ESR = 0x0000000096000004
EC = 0x25: DABT (prąd EL), IL = 32 bity
USTAW = 0, FnV = 0
EA = 0, S1PTW = 0
FSC = 0x04: błąd translacji poziomu 0
Informacje o przerwaniu danych:
ISV = 0, ISS = 0x00000004, ISS2 = 0x00000000
CM = 0, WnR = 0, TnD = 0, TagAccess = 0
GCS = 0, Nakładka = 0, DirtyBit = 0, Xs = 0
tabela użytkowników: 4 tys. stron, 48-bitowe urządzenia wirtualne, pgdp=0000000102c88000
[0000001ffffffff0] pgd=0000000000000000, p4d=0000000000000000
Błąd wewnętrzny: Ups: 0000000096000004 [#1] SMP
Moduły połączone w:
Procesor: 2 UID: 0 PID: 102 Comm: kworker/2:1 Nieskażony 7.0.0-rc6-next-20260331-00013-g4d93c25963c5-dirty #80 PREEMPT
Nazwa sprzętu: Płyta Rockchip RK3576 EVB V10 (DT)
Kolejka robocza: event_freezable mmc_rescan
pstan: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
szt: sg_init_table+0x2c/0x50
lr : sg_init_table+0x24/0x50
sp: ffff8000837db710
x29: ffff8000837db710 x28: 000000000000c000 x27: 0000000000000300
x26: 0000000000000000 x25: 0000000000000040 x24: ffff0000c46a0000
x23: 0000000000000000 x22: ffff0000c0c73c00 x21: 0000000000000010
x20: 0000000000000010 x19: 0000000000000000 x18: 000000000000002c
x17: 0000000000000000 x16: 0000000000000001 x15: 0000000000000000
x14: 0000000000000400 x13: ffff8000837dc000 x12: 0000000000000000
x11: ffff0000c0c73ca0 x10: 0000000000000040 x9: 459ec1f0abbdbb00
x8 : 0000001ffffffffe0 x7 : 0000000000000000 x6 : 000000000000003f
x5 : 0000000000035579 x4 : 0000000000000901 x3 : 0000000000000000
x2 : 0000000000000000 x1 : 0000000000000000 x0 : 0000000000000010
Śledzenie połączeń:
sg_init_table+0x2c/0x50 (P)
mmc_mq_init_request+0x64/0x90
blk_mq_alloc_map_and_rqs+0x3ac/0x480
blk_mq_alloc_set_map_and_rqs+0x98/0x1e0
blk_mq_alloc_tag_set+0x1c0/0x290
mmc_init_queue+0x120/0x370
mmc_blk_alloc_req+0x150/0x420
Aby temu zapobiec, dodaj kontrolę poprawności w mmc_mq_init_request() do
wykrywa, kiedy sg_len (utworzone z max_segs) wynosi zero. Jeśli sg_len wynosi zero,
zwracamy błąd i drukujemy komunikat o błędzie, zezwalając na sterownik hosta
programistom zidentyfikowanie i naprawienie nieprawidłowej konfiguracji max_segs.
Jest to środek obronny, który zapewnia, że rdzeń MMC ulegnie płynnej awarii
gdy sterowniki hosta podają nieprawidłowe wartości max_segs, zamiast ulegać awarii
z błędem strony.
>_ Referencje
- https://git.kernel.org/stable/c/03f5a16ec85beebabd5ab5e67ac1527f87908ded
- https://git.kernel.org/stable/c/3e0483e93a8be320f70a1ff68d835f7f015af311
- https://git.kernel.org/stable/c/9cca3c0c1472d6204ef8a78a6e7b3afe9610b22e
- https://git.kernel.org/stable/c/a8283f7d93f0d9336b15618b9665279ff6944319
- https://git.kernel.org/stable/c/b037c2f7794aa01ee2a00e43c29645fd2dd2dfb9
- https://git.kernel.org/stable/c/c465608bd25d7f8565be7817a6a36a5d69f8aa14
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