CVE-2024-53058
KrytyczneCVSS 9.4Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 16 - wyżej niż 16% wszystkich znanych CVE
Streszczenie
W jądrze Linux w sterowniku sieciowym stmmac wykryto podatność związaną z niezbalansowanym mapowaniem/odmapowywaniem DMA dla danych niebędących stronami (non-paged) w kontekście TSO. Błędne przypisanie adresu bufora DMA do niewłaściwego elementu tablicy tx_skbuff_dma powoduje przedwczesne odmapowanie bufora, zanim sprzęt DMA zakończy jego użycie. Może to prowadzić do transmisji uszkodzonych danych lub błędów IOMMU.
Ocena ryzyka
Organizacja może doświadczyć niestabilności sieci, uszkodzenia przesyłanych danych lub awarii systemu z powodu błędów IOMMU. W skrajnych przypadkach może to umożliwić atakującemu zakłócenie działania usług sieciowych.
Rekomendacja
Zaleca się natychmiastowe zaktualizowanie jądra Linux do wersji zawierającej poprawkę dla CVE-2024-53058. Należy również monitorować biuletyny bezpieczeństwa dystrybucji i zastosować odpowiednie łatki.
Inne podatności w Linux kernel
Zobacz wszystkie- CVE-2026-93204Nieznane
W jądrze Linux moduł batman-adv aktualizował adresy MAC za pomocą zwykłego kopiowania, co mogło być częściowo widoczne dla równoległych czytelników. Czytelnik mógł przesłać do sieci niepełny adres MAC lub użyć go w odpowiedziach ARP, zatruwając pamięć podręczną ARP. Poprawka stosuje atomic64_t do przechowywania 48-bitowego adresu MAC, zapewniając, że czytelnik widzi albo stary, albo nowy adres, nigdy mieszankę.
- CVE-2026-93202Nieznane
W jądrze Linux występuje błąd w podsystemie I3C, polegający na rekurencyjnym zakładaniu blokady podczas rejestracji nowych urządzeń I3C. Funkcja i3c_master_register_new_i3c_devs() rejestruje urządzenia, trzymając blokadę i3c_bus_normaluse_lock(), a wywołanie device_register() może natychmiast uruchomić procedurę probe, która ponownie próbuje założyć tę samą blokadę, co prowadzi do zakleszczenia. Problem został rozwiązany poprzez rozdzielenie tworzenia i rejestracji urządzeń oraz użycie blokady konserwacyjnej.
- CVE-2026-93200Nieznane
Podsystem I3C w jądrze Linux miał podatność use-after-free wskaźnika master->this. Wywołania zwrotne atrybutów sysfs używały tego wskaźnika po jego zwolnieniu, co powodowało naruszenie pamięci. Poprawka utrzymuje wskaźnik żywotność aż do momentu zwolnienia urządzenia i resetuje go na ścieżkach błędów.
- CVE-2026-93199Nieznane
W jądrze Linux funkcja i3c_master_search_i3c_dev_duplicate() wyszukująca duplikaty urządzeń I3C może błędnie dopasować samo urządzenie master (master->this), zwracając kontroler jako duplikat. Ponieważ kontroler nie jest urządzeniem docelowym, nie powinien być traktowany jako duplikat. Poprawka wyklucza master->this z dopasowania.
- CVE-2026-93198Nieznane
W jądrze Linux moduł dm-pcache nie waliduje łańcucha dirty_tail przy wczytywaniu. Złośliwy obraz, którego pola na nośniku są uwierzytelniane tylko przez crc32c ze stałym ziarnem, może wskazać dirty_tail na łańcuch ostatnich ksetów, który nigdy się nie kończy, powodując nieskończone ponowne uzbrajanie cache_writeback_fn(). Poprawka dodaje walidację łańcucha dirty_tail przy wczytywaniu z limitem przeskoków.
- CVE-2026-93197Nieznane
W jądrze Linux występuje błąd w mechanizmie memcg, w którym przy odłączaniu cgroup pamięci rozmiary LRU są kopiowane do rodzica zamiast być przenoszone, pozostawiając nieaktualne liczniki w dziecku. Powoduje to, że skaner LRU (lub MGLRU) odczytuje fałszywe rozmiary i wykonuje jałowe pętle skanowania na martwych cgroupach, co prowadzi do zawyżenia limitów i marnowania CPU. W jednym przypadku wykryto liczniki opisujące 476 GiB stron, czyli 1,89x więcej niż fizyczna pamięć hosta.
- CVE-2026-93195Nieznane
W jądrze Linux sterownik drm/bridge synopsys dw-dp inicjalizuje i rejestruje kanał AUX DisplayPort podczas dw_dp_bind(), ale nigdy go nie wyrejestrowuje. Może to prowadzić do wycieków zasobów i/lub use-after-free. Poprawka dodaje brakującą funkcję dw_dp_unbind() umożliwiającą sprzątanie.
- CVE-2026-93194Nieznane
W jądrze Linux w sterowniku drm/rockchip (dw_dp) zasoby rdzeniowe, takie jak kanał AUX DisplayPort, są inicjalizowane i rejestrowane podczas dw_dp_bind(), ale nigdy nie są wyrejestrowywane. Prowadzi to do wycieków pamięci i/lub użycia po zwolnieniu (use-after-free), co widać w raporcie KASAN. Problem został rozwiązany poprzez użycie funkcji dw_dp_unbind() w callbacku unbind() komponentu oraz w ścieżce błędu bind().
- CVE-2026-93193Nieznane
W jądrze Linux sterownik drm/rockchip analogix_dp ma wyciek referencji do węzła OF w rockchip_dp_drm_encoder_enable(), ponieważ of_get_child_by_name() nie wywołuje symetrycznie of_node_put(). Poprawka używa __free(device_node) do automatycznego zarządzania zwalnianiem referencji.
- CVE-2026-93191Nieznane
W jądrze Linux funkcja smack_msg_queue_msgrcv() błędnie sprawdza uprawnienia zadania 'current' zamiast zadania 'target'. W ścieżce optymalizacji pipelined_send() nadawca sprawdza uprawnienia w imieniu odbiorcy, więc nieuprawniony odbiorca może otrzymać wiadomość, naruszając politykę MAC Smack. Poprawka sprawdza uprawnienia zadania 'target'.
Oryginalny opis (angielski, źródło NVD)
In the Linux kernel, the following vulnerability has been resolved: net: stmmac: TSO: Fix unbalanced DMA map/unmap for non-paged SKB data In case the non-paged data of a SKB carries protocol header and protocol payload to be transmitted on a certain platform that the DMA AXI address width is configured to 40-bit/48-bit, or the size of the non-paged data is bigger than TSO_MAX_BUFF_SIZE on a certain platform that the DMA AXI address width is configured to 32-bit, then this SKB requires at least two DMA transmit descriptors to serve it. For example, three descriptors are allocated to split one DMA buffer mapped from one piece of non-paged data: dma_desc[N + 0], dma_desc[N + 1], dma_desc[N + 2]. Then three elements of tx_q->tx_skbuff_dma[] will be allocated to hold extra information to be reused in stmmac_tx_clean(): tx_q->tx_skbuff_dma[N + 0], tx_q->tx_skbuff_dma[N + 1], tx_q->tx_skbuff_dma[N + 2]. Now we focus on tx_q->tx_skbuff_dma[entry].buf, which is the DMA buffer address returned by DMA mapping call. stmmac_tx_clean() will try to unmap the DMA buffer _ONLY_IF_ tx_q->tx_skbuff_dma[entry].buf is a valid buffer address. The expected behavior that saves DMA buffer address of this non-paged data to tx_q->tx_skbuff_dma[entry].buf is: tx_q->tx_skbuff_dma[N + 0].buf = NULL; tx_q->tx_skbuff_dma[N + 1].buf = NULL; tx_q->tx_skbuff_dma[N + 2].buf = dma_map_single(); Unfortunately, the current code misbehaves like this: tx_q->tx_skbuff_dma[N + 0].buf = dma_map_single(); tx_q->tx_skbuff_dma[N + 1].buf = NULL; tx_q->tx_skbuff_dma[N + 2].buf = NULL; On the stmmac_tx_clean() side, when dma_desc[N + 0] is closed by the DMA engine, tx_q->tx_skbuff_dma[N + 0].buf is a valid buffer address obviously, then the DMA buffer will be unmapped immediately. There may be a rare case that the DMA engine does not finish the pending dma_desc[N + 1], dma_desc[N + 2] yet. Now things will go horribly wrong, DMA is going to access a unmapped/unreferenced memory region, corrupted data will be transmited or iommu fault will be triggered :( In contrast, the for-loop that maps SKB fragments behaves perfectly as expected, and that is how the driver should do for both non-paged data and paged frags actually. This patch corrects DMA map/unmap sequences by fixing the array index for tx_q->tx_skbuff_dma[entry].buf when assigning DMA buffer address. Tested and verified on DWXGMAC CORE 3.20a

