CVE-2026-99081
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
bnxt_en: napraw długość mapowania DMA dla małych pakietów z dopełnieniem
Stefan Fleischmann zgłosił błędy odczytu Intel IOMMU DMA na BCM57412
Karty sieciowe NetXtreme-E podczas przesyłania pakietów na interfejsach VLAN/macvlan:
DMAR: [Odczyt DMA NO_PASID] Żądaj urządzenia [18:00.0] adres błędu 0xfc499000
[przyczyna błędu 0x06] PTE Dostęp do odczytu nie jest ustawiony
bnxt_en 0000:18:00.0 eno1np0: Porzucenie wiadomości {0xb4 0x41a} len: 0 ze względu na stan oprogramowania: 0x2000001
...
NETDEV WATCHDOG: eno1np0 (bnxt_en): przekroczono limit czasu kolejki transmisji 0
Adres błędu (0xfc499000) znajduje się dokładnie na granicy strony 4 KB,
wskazując na przepełnienie bufora odczytu DMA.
W bnxt_start_xmit() pakiety mniejsze niż BNXT_MIN_PKT_SIZE (52 bajty),
takie jak 42-bajtowe nieoznaczone ramki ARP, są dopełniane:
if (długość < BNXT_MIN_PKT_SIZE) {
podkładka = BNXT_MIN_PKT_SIZE - długość;
if (skb_pad(skb, pad))
przejdź do tx_kick_pending;
długość = BNXT_MIN_PKT_SIZE;
}
mapowanie = dma_map_single(&pdev->dev, skb->data, len, DMA_TO_DEVICE);
...
dma_unmap_len_set(tx_buf, len, len);
Jednak „len” został wcześniej zainicjowany do skb_headlen(skb) (np. 42 bajty)
i pozostaje nieregulowany po wypełnieniu. W związku z tym dma_map_single() i
dma_unmap_len_set() mapuje i śledzi tylko 42 bajty.
Później programuje się sprzętowy deskryptor bufora TX z dopełnioną długością:
txbd->tx_bd_len_flags_type =
cpu_to_le32(((długość + podkładka) << TX_BD_LEN_SHIFT) | flagi |
TX_BD_FLAGS_PACKET_END);
Silnik karty NIC DMA otrzymuje zatem polecenie odczytania 52 bajtów z regionu, w którym
tylko 42 bajty zostały zmapowane przez DMA. Jeśli skb->data kończy się w pobliżu granicy 4 KB
(w obrębie bajtów „pad” następnej strony), sprzętowe przekroczenie odczytu DMA
na niezamapowaną sąsiednią stronę, powodując błąd IOMMU.
Ten problem został ujawniony po zatwierdzeniu 447cbe95ebb9 („vlan: fix skb_under_panic
i przyspiesza przy przełączaniu odciążania HW VLAN”), ponieważ rezerwacja dodatkowej sieci VLAN
zapas zaokrąglony LL_RESERVED_SPACE od 48 do 64 bajtów, przesuwanie skb->data
przesunięcia i potencjalnie powodować, że małe ramki będą lądować bezpośrednio na stronie
granice.
Napraw to, używając skb_put_padto(skb, BNXT_MIN_PKT_SIZE) w
bnxt_start_xmit(), przed próbkowaniem skb_shinfo(skb)->nr_frags,
ponieważ dopełnienie może zlinearyzować skb.
Dzięki temu skb->len i skb_headlen(skb) odzwierciedlają dopełniony rozmiar, więc
że dma_map_single() odwzorowuje pełny bufor i długość deskryptora wynosi
spójne. Usuwa to również tymczasową zmienną „pad” i logikę maskowania.
W przeciwnym razie dopełnienie odbywa się po gałęzi SW USO
bnxt_sw_udp_gso_xmit() uwzględni dopełnienie jako ładunek UDP
i wyślij go w dodatkowych segmentach.
Należy zauważyć, że segmenty SW USO nadal nie są dopełniane: w przypadku protokołu IPv4 jest to segment
przenoszący mniej niż 10 bajtów ładunku UDP (mały gso_size lub krótki
ostatni segment) jest wysyłany jako ramka krótsza niż BNXT_MIN_PKT_SIZE.
Jest to osobny problem, pozostawiony do wydania kolejnej łatki.
>_ Referencje
- https://git.kernel.org/stable/c/2956aca14dd2977cd08bd2ccafae3beb8b84b268
- https://git.kernel.org/stable/c/5213f65a9667d3dd85db2e6df8f2e0516290db34
- https://git.kernel.org/stable/c/a51d233ccd4889aadb71dace863525cc2b00271e
- https://git.kernel.org/stable/c/cf8530a25ae92c4493e2f22981ecb46f0b66f4c8
- https://git.kernel.org/stable/c/fbd977e513971ccb4f0762a7f59eac500e474f89
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