Odebrany

CVE-2026-98369

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ę:

xfrm: dodaj brakujące rcu_read_lock(), skb_dst_force() i dev_hold() dla xfrm_trans_reinject()

syzbot zgłosił podejrzane ostrzeżenie dotyczące użycia RCU w ip6_pkt_drop():

OSTRZEŻENIE: podejrzane użycie RCU w ip6_pkt_drop
include/net/addrconf.h:389 podejrzane użycie funkcji rcu_dereference_check()!

Zadzwoń do śledzenia:
__in6_dev_get_safely include/net/addrconf.h:389 [inline]
ip6_pkt_drop+0x596/0x610 net/ipv6/route.c:4620
ip6_pkt_discard+0x1c/0x30 net/ipv6/route.c:4651
xfrm_trans_reinject+0x324/0x630 net/xfrm/xfrm_input.c:806
Process_one_work kernel/workqueue.c:3322 [inline]
proces_scheduled_works+0xa8e/0x14e0 jądro/workqueue.c:3405
wątek_pracownika+0xa47/0xfb0 jądro/workqueue.c:3486

Kiedy zatwierdzisz 4f4920669d21 („xfrm: Wprowadź ponownie pakiety w trybie transportu przez
workqueue”) przekonwertował xfrm_trans_reinject z zadania na kolejkę roboczą,
pętla ponownego wstrzyknięcia przestała działać w kontekście softirq. Pracownicy kolejki roboczej
uruchom w kontekście procesu, gdzie local_bh_disable() nie wprowadza RCU
sekcja krytyczna strony odczytu w CONFIG_PREEMPT_RCU.

Ponieważ wywołania zwrotne zakończenia (takie jak ip6_rcv_finish) spodziewają się, że będą działać pod adresem
Blokada odczytu RCU (przeszukiwanie tras, wyszukiwanie l3mdev i uzyskiwanie dostępu
Struktury danych chronione RCU), wywołując je w kontekście kolejki roboczej bez
rcu_read_lock() wyzwala ostrzeżenia o blokowaniu RCU.

Co więcej, pakiety umieszczane w kolejce roboczej za pomocą funkcji xfrm_trans_queue_net()
może przenosić wpisy dst niezliczone (noref) (np. z ip_route_input_noref).
Dodatkowo, w przypadku wyrejestrowania urządzenia sieciowego, dst_dev_put() zastępuje dst->dev
z blackhole_netdev, więc wpisy dst nie utrzymują skb->dev przy życiu
stał w kolejce roboczej.

Napraw te problemy poprzez:
1. Wywołanie skb_dst_force(skb) w xfrm_trans_queue_net() będąc jeszcze w
sekcję RCU dzwoniącego, aby upewnić się, że dst zostanie zliczony przed ustawieniem się w kolejce.
2. Trzymanie referencji na skb->dev poprzez dev_hold()/dev_put() w kolejce roboczej
odroczenie, aby skb->dev pozostało ważne podczas przetwarzania wywołania zwrotnego Finish().
3. Pobranie funkcji rcu_read_lock() wokół pętli wywołania zwrotnego zakończenia
xfrm_trans_reinject().

>_ 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