CVE-2026-93781
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
scsi: core: Nie blokuj alokacji tagów w scsi_eh_lock_door()
Funkcja scsi_eh_lock_door() jest wywoływana z funkcji scsi_restart_ Operations(), podczas gdy funkcja
host jest nadal w stanie SHOST_RECOVERY, tj. zanim host będzie
przełączono z powrotem na SHOST_RUNNING i scsi_run_host_queues() ponownie uruchamia
kolejki. Przydziela żądanie za pomocą scsi_alloc_request() bez flag,
więc blk_mq_get_tag() może blokować oczekiwanie na darmowy tag sched, gdy wszystkie tagi
są już w użyciu.
Tagi te mogą być przechowywane przez polecenia, które właśnie zostały ponownie umieszczone w kolejce
scsi_eh_flush_done_q() podczas obsługi błędów. Takich poleceń nie może być
wysyłane, dopóki host nie opuści SHOST_RECOVERY i
wywoływana jest funkcja scsi_run_host_queues() - co ma miejsce tylko *po*
scsi_eh_lock_door() zwraca.
Tworzy to zależność cykliczną:
- scsi_eh_lock_door(), działająca w wątku obsługi błędów SCSI, czeka
dla znacznika sched przechowywanego przez polecenie ponownie umieszczone w kolejce;
- ponownie kolejkowane polecenie nie może zostać ukończone i zwolnić znacznika sched do czasu
wątek obsługi błędów opuszcza funkcję scsi_restart_ Operations() i uruchamia ponownie
kolejki.
W przypadku urządzeń z pojedynczym znacznikiem sterownika (np. pamięć USB) jest to:
gwarantowany zakleszczenie i operacje we/wy, których nigdy nie można przesłać. Ten problem
został również odtworzony w naszym środowisku.
Zablokowanie drzwi jest operacją wymagającą największego wysiłku i scsi_eh_lock_door()
już powraca w trybie dyskretnym, gdy alokacja żądania nie powiedzie się. Przełęcz
BLK_MQ_REQ_NOWAIT do scsi_alloc_request(), więc alokacja nie powiedzie się
zamiast blokować, gdy żaden tag nie jest dostępny. To łamie okólnik
zależność i pozwala obsłudze błędów zakończyć ponowne uruchamianie kolejek,
po czym oczekujące polecenia są wysyłane normalnie.
>_ 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