Odebrany

CVE-2026-98829

opublikowano:
modyfikacja:
Ocena CVSS
n/a
Brak oceny

>_ Opis

Tłumaczenie automatyczne – może zawierać nieścisłości.

W jądrze Linuksa usunięto następującą lukę:

wifi: mac80211: upuść zbyt duże fragmenty, aby uniknąć przepełnienia extra_len

W ieee80211_rx_h_defragment() ładunki fragmentów są gromadzone w
wpis->extra_len w miarę pojawiania się kolejnych fragmentów:

wpis->extra_len += rx->skb->len;

Kiedy nadejdzie ostatni fragment, fragment głowy jest usuwany z kolejki i
pskb_expand_head() jest wywoływana z wpisem->extra_len, aby zapewnić wystarczające
Tailroom dla wszystkich fragmentów znajdujących się w kolejce przed kopiowaniem:

if (skb_tailroom(rx->skb) < wpis->extra_len) {
if (mało prawdopodobne (pskb_expand_head(rx->skb, 0, wpis->extra_len,
GFP_ATOMIC))) {
...
}
}
while ((skb = __skb_dequeue(&entry->skb_list))) {
skb_put_data(rx->skb, skb->dane, skb->len);
dev_kfree_skb(skb);
}

W zatwierdzeniu 69f132236827 („mac80211: zmniejsz strukturę
ieee80211_fragment_entry"), wpis->extra_len został zawężony z unsigned
in do u16, aby zmniejszyć zużycie pamięci struktury.

Jednakże sekwencja ramek IEEE 802.11 może zawierać do 16 fragmentów
(numery fragmentów 0..15). Jeśli nadejdzie sekwencja dużych fragmentów (np
złośliwy peer lub fałszywy punkt dostępowy), suma długości fragmentów może przekroczyć
65535 bajtów (na przykład 15 fragmentów po 4400 bajtów daje łącznie 66000 bajtów).
Ponieważ extra_len to u16, ten dodatek przepełnia się i zawija
modulo 65536 (np. 66000 zwija się do 464).

W rezultacie pskb_expand_head() przydziela tylko obciętą ilość
Tailroom (lub jest całkowicie pomijany, jeśli fragment głowy ma już >= 464
bajtów Tailroom). Kiedy skb_put_data() następnie wykonuje iterację po
kolejkowana lista skb, dołącza pełny ładunek do niewymiarowego bufora,
powodując, że skb_put() uruchamia skb_over_panic() i powoduje awarię jądra
kontekst softirqa.

Prawidłowy MSDU w IEEE 802.11 ma maksymalnie 2304 bajty (lub maksymalnie 7935/11454
bajtów dla A-MSDU, który nie jest pofragmentowany), znacznie poniżej U16_MAX.

Napraw to bez zwiększania rozmiaru struktury ieee80211_fragment_entry przez
sprawdzenie, czy dodanie długości przychodzącego fragmentu nie przekroczy U16_MAX.
Jeśli tak, usuń fragmenty z kolejki i usuń klatkę.

[przypisz oddzielny powód rezygnacji]

>_ Referencje

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