CVE-2026-74269
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: bnxt: XDP head-grow sırasında oluşan head underflow hatası düzeltildi xdp.py testi olan test_xdp_native_adjst_head_grow_data, bir bnxt makinesinde çalıştırıldığında (ve ayrıca NIPA'da) çökmektedir. Hatanın, skb head yapısını oluşturan bnxt_rx_multi_page_skb fonksiyonundaki bir underflow durumundan kaynaklandığı görülmektedir: napi_build_skb(data_ptr - bp->rx_offset, rxr->rx_page_size); Bu ifadeyle ilgili sorun, sayfa modunda rx_offset değerinin şu şekilde olmasıdır: bp->rx_offset = NET_IP_ALIGN + XDP_PACKET_HEADROOM; Bu değer (en azından x86_64 üzerinde) 258 olarak hesaplanmaktadır. test_xdp_native_adjst_head_grow_data testi, head kısmının -256 kadar ayarlandığı bir durumu test eder. Bu test çalıştığında, data_ptr değeri frag_start + 2 konumuna kaydırılır (burada frag_start = page_address(page) + offset). Ardından bnxt_rx_multi_page_skb çağrılır ve napi_build_skb ifadesi 258 çıkararak frag_start öncesindeki bir adrese ulaşır. Offset < 256 olduğunda (örneğin fragment offset 0'dan başladığında), bu adres ya önceki fragment ya da önceki fiziksel sayfa olabilir. skb serbest bırakıldığında, page pool fragment referansı ya yanlış sayfadan ya da doğru sayfanın yanlış fragment'ından düşürülür. Her iki durumda da bozulmuş referans sayısı, sayfanın hala kullanımdayken vaktinden önce geri dönüştürülmesine yol açabilir. Hatalı şekilde geri dönüştürüldüğünde, sayfa tekrar tahsis edilebilir ve sürücü kapatma işlemi sırasında bu durum double free ile sonuçlanır. Düzeltilen commit, yerel sayfa boyutunun >= 64k olduğu durumu yönetmek için bu kodu güncellemiş ancak istemeden head grow durumunu bozmuştur. Bunu düzeltmek için, struct bnxt_sw_rx_agg_bd içindeki mevcut offset alanını yansıtacak şekilde struct bnxt_sw_rx_bd yapısına bir offset alanı eklenmiştir. Bu alan tahsis sırasında doldurulur ve yeniden kullanımda korunur. bnxt_rx_multi_page_skb içerisinde, fragment başlangıcını hesaplamak için yeni eklenen offset alanı kullanılır ve bu değer napi_build_skb fonksiyonuna aktarılır. Düzenleme skb_reserve ile yapılır. İki durum mevcuttur: ayarlama yapılmayan durum ve ayarlama yapılan durum. Her iki durumda da skb, yerel sayfa boyutunun >= 64K olduğu durumu hesaba katmak için page_address(page) + offset konumunda oluşturulur ve skb_reserve, data_ptr - (page_address(page) + offset) şeklinde çağrılır. Bu fark, data_ptr hareket ettirilmediğinde bp->rx_offset değerine veya XDP head kısmını ayarladığında bp->rx_offset + xdp_adjust değerine eşittir. Hata veren testin bu commit uygulandıktan sonra tekrar çalıştırılması, testin başarıyla tamamlanmasını sağlamaktadır. Diğer rx_skb_func uygulamalarında bu sorun bulunmamaktadır.
Nasıl düzeltilir
- Linux Linux59f6211c006cb5936b443fb396eb43864ca21ed5, 3e8f3959a7fd28461b8cd9708c21286b4250b77a, ff34e5a26a26c92142afea11455e259c4c4c617b, 4c03275bc4435cc8e25f7f3f08aff58c0e783d8d, bb72b1c6755631c74b7e0878ee55bb81c06776c0, e26657fe3b85c068b01f42bb0c602f242d643ba9, 6.1.191, 6.5 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| Linux Linux | e9f11bfc03fb0d3c86f91b8ae945bb10f7e19c16 ≤ v < 59f6211c006cb5936b443fb396eb43864ca21ed5, f6974b4c2d8e1062b5a52228ee47293c15b4ee1e ≤ v < 3e8f3959a7fd28461b8cd9708c21286b4250b77a, f6974b4c2d8e1062b5a52228ee47293c15b4ee1e ≤ v < ff34e5a26a26c92142afea11455e259c4c4c617b, f6974b4c2d8e1062b5a52228ee47293c15b4ee1e ≤ v < 4c03275bc4435cc8e25f7f3f08aff58c0e783d8d, f6974b4c2d8e1062b5a52228ee47293c15b4ee1e ≤ v < bb72b1c6755631c74b7e0878ee55bb81c06776c0, f6974b4c2d8e1062b5a52228ee47293c15b4ee1e ≤ v < e26657fe3b85c068b01f42bb0c602f242d643ba9, ae0e135dc900827687ecc684c2bbb57aae48d318, 6.1.45 ≤ v < 6.1.191, 6.4.10 ≤ v < 6.5, 6.5 | 59f6211c006cb5936b443fb396eb43864ca21ed5, 3e8f3959a7fd28461b8cd9708c21286b4250b77a, ff34e5a26a26c92142afea11455e259c4c4c617b, 4c03275bc4435cc8e25f7f3f08aff58c0e783d8d, bb72b1c6755631c74b7e0878ee55bb81c06776c0, e26657fe3b85c068b01f42bb0c602f242d643ba9, 6.1.191, 6.5 |
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.