Odebrany

CVE-2026-80947

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

Wi-Fi: rtl8xxxu: napraw użycie po zwolnieniu z rx_urb_wq na przystanku

rtl8xxxu ramiona rx_urb_wq ze ścieżki zakończenia RX:
rtl8xxxu_rx_complete() przekazuje URB rtl8xxxu_queue_rx_urb(), który
umieszcza go w kolejce na rx_urb_pending_list i, gdy lista się powiększy
RTL8XXXU_RX_URB_PENDING_WATER, harmonogramy rx_urb_wq. Pracownik
rtl8xxxu_rx_urb_work() opróżnia rx_urb_pending_list, odzyskuje prywatność przez
kontener_of i ponownie przesyła każdy URB za pomocą rtl8xxxu_submit_rx_urb(),
który zakotwicza go na rx_anchor i dereferuje priv->udev.

rtl8xxxu_stop() anuluje elementy pracy rodzeństwa (c2hcmd_work, ra_watchdog,
update_beacon_work), ale nigdy nie anuluje rx_urb_wq, więc pracownik jest uzbrojony podczas
po ostatniej serii ruchu RX można uruchomić funkcję rtl8xxxu_rx_urb_work().
rtl8xxxu_disconnect() wywołała ieee80211_free_hw(), która zwalnia priv,
tworząc produkt bezużyteczny. Okno otwiera się przy aktywnym ruchu RX
(oczekujące zliczenie nad znakiem wodnym), po czym następuje rozłączenie.

Do zakończenia pozostają dwa wyścigi po rozbiórce:

* rtl8xxxu_queue_rx_urb() zdecydowała, czy umieścić w kolejce pod rx_urb_lock
ale wywołał funkcjęharmonogram_work() po usunięciu blokady. Dopełnienie
który zaobserwował zamknięcie == false i zwolnił blokadę, mógł następnie wywołać
harmonogram_work() po ustawieniu przez rtl8xxxu_stop() zamknięcia i
cancel_work_sync() już powróciła, uzbrajając pracownika do działania
po rozbiórce. Przenieśharmonogram_work() w ramach tego samego !shutdown
gałęzi, więc decyzja o uzbrojeniu jest niepodzielna w przypadku sprawdzenia zamknięcia.

* rtl8xxxu_rx_urb_work() zakotwicza każdy URB, do którego został spuszczony
rx_anchor do rtl8xxxu_submit_rx_urb(). Pracownik nadal pracujący
kiedy usb_kill_anchored_urbs(&priv->rx_anchor) zwróci, prześle
URB, który uniknął zabójstwa. W rtl8xxxu_stop() wywołaj
cancel_work_sync(&priv->rx_urb_wq) przed zabiciem, aby pracownik był
najpierw osuszone.

Po ustawieniu priv->shutdown w rx_urb_lock uzupełnianie nie jest już możliwe
kolejka rx_urb_wq. cancel_work_sync() następnie opróżnia ostatnią kolejkę lub uruchomioną
worker, a następująca funkcja usb_kill_anchored_urbs() zabija URB, jakie może
złożyły.

rtl8xxxu_disconnect() jest objęty, ponieważ ieee80211_unregister_hw()
gwarantuje, że .stop() będzie działać dla aktywnego interfejsu przed ieee80211_free_hw()
uwalnia priv. Ścieżka błędu sondy nie wymaga anulowania: rx_urb_wq to
INIT_WORK() tam była, ale nie mogła zostać zaplanowana, ponieważ nie ma URB
przesłane przed pomyślnym pomyślnym wykonaniem funkcji ieee80211_register_hw().

Ten błąd został znaleziony poprzez analizę statyczną.

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