CVE-2026-98158
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
ppp_async: usuń błędną ramkę zamiast resetować jej zapas
ppp_receive_nonmp_frame() przed uruchomieniem dodaje dwubajtowy znacznik kierunku
filtry pass/active BPF:
*(__be16 *)skb_push(skb, 2) = htons(PPP_FILTER_INBOUND_TAG);
Nic na ścieżce odbioru nie gwarantuje tych dwóch bajtów zapasu. The
ścieżka błędu ramki w funkcji Process_input_packet() ppp_async resetuje ponownie użyte skb
zapas do zera, żądając przywrócenia go do świeżo przydzielonego stanu -
ale świeży skb z dev_alloc_skb() przenosi NET_SKB_PAD:
błąd:
jeśli (skb) {
/* sprawia, że skb pojawia się jako świeżo przydzielony */
skb_trim(skb, 0);
skb_reserve(skb, - skb_headroom(skb));
}
ap->rpkt nadal wskazuje na ten skb, więc następna ramka jest w nim ponownie składana
w ogóle bez miejsca na głowę. Element równorzędny, który wysyła ramkę z nieprawidłowym FCS, po której następuje jedna
zaczynając od ff 03, pozostawia pojedynczy bajt zapasu do czasu filtrowania
znacznik zostaje wypchnięty, co powoduje wylądowanie o jeden bajt poniżej skb->head:
skbuff: skb_under_panic: len:49 put:2 head:ffff888003c10000
dane: ffff888003c0ffff ogon: 0x30 koniec: 0x640 programista: <NULL>
BŁĄD jądra w net/core/skbuff.c:214!
RIP: 0010:skb_panic+0x13e/0x230
Zadzwoń do śledzenia:
skb_push+0xbd/0x100
ppp_receive_nonmp_frame+0x48a/0x1d10
ppp_input+0x4e9/0x2f80
ppp_async_process+0x2a/0xe0
tasklet_action_common+0x20f/0x8a0
handle_softirqs+0x18e/0x590
Panika jądra – brak synchronizacji: krytyczny wyjątek w przerwaniu
Zerowanie zapasu narusza gwarancję NET_SKB_PAD, że dev_alloc_skb()
podaje resztę ścieżki odbioru. Oprócz powyższej paniki filtra, gdy CCP
kompresja jest włączona ppp_decompress_frame() ręce skb->data - 2 do
->decompress()/->incomp(), który następnie odczytuje wartości poza zakresem przed skb->head
z tego samego powodu.
Zamiast przywracać zapas, usuń błędną klatkę - jako ppp_synctty
już to robi na swojej ścieżce błędu - i wyczyść ap->rpkt, aby następna ramka była
ponownie zmontowany w świeży skb z odpowiednią przestrzenią nad głową. Jest to prostsze i naprawia
odczytany został zarówno komunikat poniżej paniki filtra, jak i odczyt CCP poza zakresem.
Oryginalna wersja V1 tej poprawki udostępniła miejsce w funkcji ppp_receive_nonmp_frame().
skb_krowia_głowa(); Eric zwrócił uwagę na naprawienie pierwotnej przyczyny w transporcie
jest właściwym podejściem.
Znaleziony przez fuzzowanie ścieżki odbioru PPP z mutującym peerem na pty; to jest
ciekawy (zdalny) DoS: root konfiguruje PPP, peer dostarcza dwie awarie
ramki. Reproduktor (repro-ppp-skb.c, niezmieniony w stosunku do wersji 1) wpada w panikę po około 1 minucie
sekundę i wraca czysto z tym zastosowanym.
>_ 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