CVE-2026-89855
NieznaneStreszczenie
W sterowniku scsi: qla2xxx jądra Linux operacja resetu przez sysfs "update cache versions without reset" (0x20261) wywołuje get_flash_version(), która odczytuje rejestry flash sprzętu, bez trzymania muteksu ha->optrom_mutex. Ścieżka aktualizacji VPD serializuje to samo wywołanie pod optrom_mutex, więc ścieżka resetu może przeplatać dostępy do rejestrów flash z równoległą operacją VPD lub optrom i uszkodzić odczyty.
Ocena ryzyka
Równoległy dostęp do rejestrów flash może prowadzić do uszkodzenia odczytywanych danych i nieprzewidywalnego zachowania sterownika. Wpływa to na integralność operacji na pamięci flash urządzenia.
Rekomendacja
Zaktualizuj jądro Linux do wersji zawierającej poprawkę, która obejmuje wywołanie get_flash_version() muteksem ha->optrom_mutex. Unikaj równoczesnego wywoływania operacji resetu i aktualizacji VPD do czasu wdrożenia poprawki.
Inne podatności w Linux kernel (qla2xxx)
Zobacz wszystkie- CVE-2026-89856Wysokie
W sterowniku scsi: qla2xxx jądra Linux liczba kolejek wyliczana z liczby wektorów MSI-X (msix_count - 1) jest zapisywana do pola typu u8, co powoduje obcięcie wartości. Przy 257 wektorach MSI-X wynik 256 obcina się do 0, a w trybie target kolejna dekrementacja powoduje niedomknięcie do 255. Gdy liczba kolejek wynosi 0, alokacja zwraca ZERO_SIZE_PTR, który nie jest NULL-em, więc sprawdzenie przechodzi i dochodzi do wyłuskania tego wskaźnika, co psuje pamięć lub powoduje awarię jądra.
- CVE-2026-89854Wysokie
W sterowniku scsi: qla2xxx jądra Linux funkcja qla84xx_put_chip() zwalnia ostatnie odwołanie do ha->cs84xx i uwalnia je przez __qla84xx_chip_release() bez wyczyszczenia ha->cs84xx. Podczas rozbierania urządzenia działała ona przed scsi_remove_host(), która usuwa atrybut sysfs 84xx_fw_version. Równoległy odczyt tego atrybutu w oknie między tymi wywołaniami wywołuje qla24xx_84xx_fw_version_show(), która wyłuskuje zwolniony ha->cs84xx, powodując use-after-free.
- CVE-2026-89853Nieznane
W sterowniku scsi: qla2xxx jądra Linux funkcja qla2x00_free_fce_trace() zwalniała i czyściła ha->fce trzymając tylko fce_mutex. Konsumenci zrzutu firmware qla27xx_fwdt_entry_t264() i qla25xx_copy_fce() odczytują ha->fce (sprawdzenie NULL, a następnie kopiowanie bufora) pod hardware_lock i nigdy nie biorą fce_mutex. Wyłączenie FCE przez debugfs mogło więc zwolnić bufor DMA między sprawdzeniem NULL a kopiowaniem, powodując use-after-free.
- CVE-2026-89852Nieznane
W sterowniku scsi: qla2xxx jądra Linux struktura mbx_cmd_t jest alokowana na stosie, ale pozostaje niezainicjalizowana. qla2x00_mailbox_command() ma kilka ścieżek wczesnego powrotu (trwała awaria PCI, awaria urządzenia, zajętość EEH, oczekujący abort ISP, przekroczenie czasu dostępu do skrzynki pocztowej, purge mbox), które wracają bez zapisania rejestrów wejściowych skrzynki do mcp->mb[]. qla2x00_get_firmware_state() następnie bezwarunkowo kopiuje mcp->mb[1..6] (oraz mb[12]) do tablicy states[] wywołującego, niezależnie od wartości zwracanej.
- CVE-2026-89851Nieznane
W sterowniku scsi: qla2xxx jądra Linux funkcja qla2x00_dfs_fce_write() wywoływała kstrtoul() z wskaźnikiem wyniku ustawionym na NULL, więc udane parsowanie powodowało wyłuskanie NULL i oops. Co gorsza, wartość zwracana typu int (0 przy sukcesie, ujemny errno przy błędzie) była przypisywana do flagi enable typu unsigned long, odwracając zamierzoną logikę: prawidłowa liczba była traktowana jako "wyłącz", a błąd parsowania włączał FCE.
Oryginalny opis (angielski, źródło NVD)
In the Linux kernel, the following vulnerability has been resolved: scsi: qla2xxx: Serialize flash version read in reset handler The "update cache versions without reset" sysfs reset operation (0x20261) calls get_flash_version(), which reads hardware flash registers, without holding ha->optrom_mutex. The VPD update path serializes the same call under optrom_mutex, so this reset path can interleave its flash register accesses with a concurrent VPD or optrom flash operation and corrupt the reads. Hold ha->optrom_mutex across the get_flash_version() call to match the VPD update path.

