CVE-2026-89851
NieznaneStreszczenie
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.
Ocena ryzyka
Wyłuskanie NULL powoduje oops jądra, czyli odmowę usługi. Dodatkowo odwrócona logika może prowadzić do niezamierzonego włączenia lub wyłączenia FCE, co wpływa na integralność diagnostyki.
Rekomendacja
Zaktualizuj jądro Linux do wersji zawierającej poprawkę, która parsuje wartość do zmiennej enable i propaguje błędy parsowania do przestrzeni użytkownika. Do czasu wdrożenia poprawki ogranicz dostęp do interfejsu debugfs FCE.
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-89855Nieznane
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.
- 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.
Oryginalny opis (angielski, źródło NVD)
In the Linux kernel, the following vulnerability has been resolved: scsi: qla2xxx: Fix FCE trace enable parsing in debugfs qla2x00_dfs_fce_write() called kstrtoul() with a NULL result pointer, so a successful parse would dereference NULL and oops. Worse, the int return value (0 on success, negative errno on failure) was assigned to the unsigned long enable flag, inverting the intended logic: a valid number was treated as "disable" while a parse failure enabled FCE. Parse the value into enable and propagate parse errors to userspace.

