CVE-2026-97569
NieznaneStreszczenie
W jądrze Linux w sterowniku bnxt_en występuje błąd, który może doprowadzić do zatrzymania kolejki transmisji. Gdy sterownik odracza ukończenia dla serii pakietów, a następnie duży pakiet USO nie mieści się w małym pierścieniu, pierścień może zostać wypełniony pakietami bez ukończeń, co blokuje kolejkę na stałe. Problem dotyczy małych pierścieni (do 457 deskryptorów) i został naprawiony poprzez wyczyszczenie bitu NO_CMPL w funkcji bnxt_txr_db_kick().
Ocena ryzyka
Może wystąpić trwałe zatrzymanie kolejki sieciowej, prowadzące do utraty łączności i konieczności restartu interfejsu lub systemu. Ryzyko jest niskie, ponieważ wymaga małego rozmiaru pierścienia i specyficznego wzorca ruchu.
Rekomendacja
Zaktualizuj jądro Linux do wersji zawierającej poprawkę dla CVE-2026-97569. Jeśli aktualizacja nie jest możliwa, rozważ zwiększenie rozmiaru pierścienia transmisji powyżej 457 deskryptorów, aby uniknąć warunków wyzwalających błąd.
Inne podatności w Linux kernel bnxt_en driver
Zobacz wszystkie- CVE-2026-97570Nieznane
W jądrze Linux w sterowniku bnxt_en występuje błąd przepełnienia bufora (out-of-bounds) w funkcji bnxt_alloc_agg_idx. Gdy oprogramowanie układowe karty sieciowej zgłasza mniejszą liczbę równoczesnych TPA (np. 32) niż maksymalna, identyfikator TPA może przekroczyć rozmiar tablicy rx_tpa, co prowadzi do nieprawidłowego dostępu do pamięci i awarii jądra podczas rozruchu.
- CVE-2026-43260Wysokie
W jądrze Linuxa naprawiono podatność związaną z logiką usuwania kontekstu RSS w sterowniku bnxt_en. Problem polegał na tym, że nieprawidłowe sprawdzenie stanu interfejsu sieciowego prowadziło do wycieku VNIC w oprogramowaniu układowym, co mogło skutkować utratą aktywnych kontekstów RSS.
Oryginalny opis (angielski, źródło NVD)
In the Linux kernel, the following vulnerability has been resolved: bnxt_en: Prevent queue stop with deferred completions When the driver receives a burst of packets, it can mark a BD with the NO_CMPL bit to defer completions. The expectation is that the last packet in the ring will have this bit unset and the completion generated by that packet will cleanup that packet and the ones preceding it. This helps to reduce the number of completions fired. The suppressed completions are controlled by the driver and the number of packets with suppressed completions scales with the size of the ring. SW USO packets, on the other hand, have an upper bound on the maximum number of BDs which can be consumed which does not scale with the ring size. So, for small rings it is possible that: a burst of packets is handed to the driver, the driver defers completions for all of the packets because the number of free descriptors stays above the threshold in the driver. Then, a USO packet arrives, but the number of BDs available is not enough and the USO code exits early. In this case, you end up in a state where the ring is full of packets with their completions suppressed, which can cause the queue to stop and never be restarted. Assuming default CONFIG_MAX_SKB_FRAGS, this is only possible for small rings (<= 457 descriptors, below the driver default value) when a burst of packets fills the ring, followed by a large USO packet that can't fit. For larger rings, the delta between the completion suppression threshold and the BDs required for SW USO is large enough that completions will fire and this case is unreachable. This issue was pointed out by Sashiko and while it seems fairly unlikely given that the queue size must be small to trigger this, it is indeed possible. Fix this by tracking the last BD which deferred completions and centralizing the logic for deciding when to ring the doorbell. The NO_CMPL bit is now cleared in bnxt_txr_db_kick(), so every doorbell site is covered, including the SW USO early exit. This guarantees the ring always ends in a BD which generates a completion to clean it and wake the queue.

