CVE-2026-99081
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: bnxt_en: doldurulmuş küçük paketler için DMA eşleme uzunluğu düzeltildi Stefan Fleischmann, VLAN/macvlan arayüzlerinde paket iletimi sırasında BCM57412 NetXtreme-E NIC'lerde Intel IOMMU DMA Okuma hataları bildirmiştir: DMAR: [DMA Read NO_PASID] Request device [18:00.0] fault addr 0xfc499000 [fault reason 0x06] PTE Read access is not set bnxt_en 0000:18:00.0 eno1np0: Abandoning msg {0xb4 0x41a} len: 0 due to firmware status: 0x2000001 ... NETDEV WATCHDOG: eno1np0 (bnxt_en): transmit queue 0 timed out Hata adresi (0xfc499000) tam bir 4KB sayfa sınırındadır ve bu durum bir DMA okuma tamponu aşmasına işaret etmektedir. bnxt_start_xmit() fonksiyonunda, 42 baytlık etiketsiz ARP çerçeveleri gibi BNXT_MIN_PKT_SIZE (52 bayt) değerinden küçük olan paketler doldurulur: if (length < BNXT_MIN_PKT_SIZE) { pad = BNXT_MIN_PKT_SIZE - length; if (skb_pad(skb, pad)) goto tx_kick_pending; length = BNXT_MIN_PKT_SIZE; } mapping = dma_map_single(&pdev->dev, skb->data, len, DMA_TO_DEVICE); ... dma_unmap_len_set(tx_buf, len, len); Ancak 'len', daha önce skb_headlen(skb) (örneğin 42 bayt) olarak başlatılmıştı ve doldurma işleminden sonra ayarlanmadan bırakılmıştır. Sonuç olarak, dma_map_single() ve dma_unmap_len_set() yalnızca 42 baytı eşler ve takip eder. Daha sonra, donanım TX tampon tanımlayıcısı doldurulmuş uzunlukla programlanır: txbd->tx_bd_len_flags_type = cpu_to_le32(((len + pad) << TX_BD_LEN_SHIFT) | flags | TX_BD_FLAGS_PACKET_END); Böylece NIC DMA motoruna, yalnızca 42 baytın DMA ile eşlendiği bir bölgeden 52 bayt okuması talimatı verilir. Eğer skb->data bir 4KB sayfanın sınırına yakın biterse (bir sonraki sayfaya 'pad' bayt kadar mesafe kalmışsa), donanım DMA okuması eşlenmemiş bitişik sayfaya taşarak bir IOMMU hatasını tetikler. Bu sorun, ek VLAN baş boşluğu ayrılmasının LL_RESERVED_SPACE değerini 48'den 64 bayta yuvarlamasıyla skb->data ofsetlerini kaydırdığı ve potansiyel olarak küçük çerçevelerin tam sayfa sınırlarına denk gelmesine neden olduğu için 447cbe95ebb9 ("vlan: fix skb_under_panic and races when toggling HW VLAN offload") commit'inden sonra ortaya çıkmıştır. Bu durum, skb_shinfo(skb)->nr_frags örneklendirilmeden önce bnxt_start_xmit() içinde skb_put_padto(skb, BNXT_MIN_PKT_SIZE) kullanılarak düzeltilmiştir; çünkü doldurma işlemi skb'yi lineer hale getirebilir. Bu, skb->len ve skb_headlen(skb) değerlerinin doldurulmuş boyutu yansıtmasını sağlayarak dma_map_single()'ın tüm tamponu eşlemesini ve tanımlayıcı uzunluğunun tutarlı olmasını sağlar. Bu işlem aynı zamanda geçici 'pad' değişkenini ve maskeleme mantığını da kaldırır. Doldurma işlemi SW USO dalından sonra gerçekleştirilir; aksi takdirde bnxt_sw_udp_gso_xmit() doldurmayı UDP yükü olarak kabul edecek ve bunu ekstra segmentlerde gönderecektir. SW USO segmentlerinin hala doldurulmadığına dikkat edilmelidir: IPv4 ile, 10 bayttan az UDP yükü taşıyan bir segment (küçük gso_size veya kısa son segment), BNXT_MIN_PKT_SIZE'dan daha kısa bir çerçeve olarak gönderilir. Bu ayrı bir sorundur ve sonraki bir yamaya bırakılmıştır.
Nasıl düzeltilir
Kaynaklarda bu zafiyet için düzeltilmiş sürüm ya da yama bağlantısı yok.
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| microsoft azl3_kernel_6.6.159.1-1 | Aralık belirtilmemiş | — |
| microsoft azl3_kernel_6.6.157.1-1 | Aralık belirtilmemiş | — |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.