CVE-2026-89732
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
usb: gadżet: f_fs: Zapobiegaj zakleszczeniom podczas pętli odczytu ep0
Obecnie ffs_ep0_read() przechowuje ffs->mutex, gdy przygotowuje się do przejścia do
spać, czekając na wydarzenie. Gdy nie ma żadnych oczekujących zdarzeń konfiguracyjnych, wywołuje
wait_event_interruptible_exclusive_locked_irq() z nadal muteksem
odbyło się. Makro oczekiwania celowo usuwa wcześniej blokadę kolejki oczekiwania
śpi, ale nie upuszcza muteksu.
Jeśli demon przestrzeni użytkownika odpytuje ep0 za pomocą metody read(), a gadżet to robi
asynchronicznie usuwane poprzez pliki konfiguracyjne (np. echo "" > UDC), a
może wystąpić zakleszczenie:
1. Porzucenie konfiguracji wywołuje funkcję fs_unbind(), która umieszcza w kolejce:
Zdarzenie FUNCTIONFS_UNBIND.
2. Demon budzi się, wykorzystuje zdarzenie i usuwa muteks.
3. Jeśli jednak demon zapętli się i natychmiast wywoła kolejną funkcję read()
przed wyjściem ponownie pobiera ffs->mutex i ponownie przechodzi do an
przerywany sen.
4. W międzyczasie funkcja fs_unbind() kontynuuje wykonywanie i próbuje to zrobić
pobierz ffs->mutex, aby zniszczyć ep0req.
5. Zakleszczenie jądra, ponieważ wątek configfs utknął w pliku
nieprzerwany sen w oczekiwaniu na muteks, podczas gdy przestrzeń użytkownika
demon znajduje się w przerywalnym śnie, utrzymując muteks na zawsze
ponieważ nie będzie już więcej wydarzeń.
Aby to naprawić, usuwamy wcześniej zarówno blokadę kolejki oczekującej, jak i ffs->mutex
idę spać i zamiast tego użyj funkcji wait_event_interruptible_exclusive().
Po przebudzeniu wracamy do etykiety „ponów próbę”, aby bezpiecznie uzyskać ponowną próbę
muteks i ponownie oceń maszynę stanu. Nie sypiając z
ffs->mutex, natywnie oddzielamy porzucanie gadżetów (które wymagają
mutex) z odpytywania przestrzeni użytkownika.
>_ 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