CVE-2022-49605

Orta

Açıklama

Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: igc: IGC_REMOVED mantığını yeniden etkinleştir ve düzgün şekilde uygula igc sürücü kodunun başlangıçta birleştirilen versiyonu (146740f9abc4 numaralı commit ile, "igc: Add support for PF"), igc_rd32/wr32() MMIO erişimcilerinde şu IGC_REMOVED kontrollerini içeriyordu: u32 igc_rd32(struct igc_hw *hw, u32 reg) { u8 __iomem *hw_addr = READ_ONCE(hw->hw_addr); u32 value = 0; if (IGC_REMOVED(hw_addr)) return ~value; value = readl(&hw_addr[reg]); /* okumalar tümü F dönmemeli */ if (!(~value) && (!reg || !(~readl(hw_addr)))) hw->hw_addr = NULL; return value; } Ve: #define wr32(reg, val) \ do { \ u8 __iomem *hw_addr = READ_ONCE((hw)->hw_addr); \ if (!IGC_REMOVED(hw_addr)) \ writel((val), &hw_addr[(reg)]); \ } while (0) Örneğin igb, MMIO erişimcilerinde benzer kontrollere sahiptir ve şu şekilde uygulanan benzer bir E1000_REMOVED makrosuna sahiptir: #define E1000_REMOVED(h) unlikely(!(h)) Bu kontroller, bir PCIe bağlantı kopması (link flap) veya başka bir tür PCI veri yolu hatasından kaynaklanabilecek cihazdan gelen 0xffffffff MMIO okuma dönüşünü tespit edip kaydetmeye ve bu noktadan itibaren MMIO okuma ve yazma işlemlerinin gerçekleştirilmesini önlemeye yarar. Ancak, IGC_REMOVED makrosu başlangıçta uygulanmamıştı: #ifndef IGC_REMOVED #define IGC_REMOVED(a) (0) #endif /* IGC_REMOVED */ Bu durum, söz konusu kontrollerin yalnızca sanallaştırma için önemli olduğu ve igc'nin sanallaştırmayı desteklemediği gerekçesiyle, sonraki bir commit'te (3c215fb18e70 numaralı commit, "igc: remove IGC_REMOVED function") IGC_REMOVED mantığının tamamen kaldırılmasına yol açmıştır. Fakat bir PCIe aygıtı, sanallaştırma kullanılmasa bile ayrılabilir ve uygun kontroller olmadan, bir igc adaptörünü etkileyen PCIe veri yolu hatası çeşitli NULL pointer dereference hatalarına yol açacaktır; çünkü hatadan sonraki ilk erişim hw->hw_addr değerini NULL olarak ayarlayacak ve sonraki erişimler körü körüne artık NULL olan bu işaretçiyi çözümleyecektir. Bu yama, igc_rd32/wr32() içindeki IGC_REMOVED kontrollerini yeniden etkinleştirir ve IGC_REMOVED'yi, hw_addr'nin NULL olma ihtimalini unlikely() durumuyla kontrol ederek igb'de yapıldığı şekilde uygular. Bu değişiklik, bir igc adaptöründe PCIe bağlantı kopması meydana geldiğinde görülen oops hatalarını önler.

ÖnemOrta
CVSS5.5
İstismar olasılığı—
ÜrünLinux Kernel
Yayın26 Şub 2025
İlk görülme26 Şub 2025

Nasıl düzeltilir

Güncelleyin
  • linux linux_kernel5.4.208, 5.10.134, 5.15.58, 5.18.15 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernel4.20 ≤ v < 5.4.208, 5.5 ≤ v < 5.10.134, 5.11 ≤ v < 5.15.58, 5.16 ≤ v < 5.18.15, 5.195.4.208, 5.10.134, 5.15.58, 5.18.15

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.

Intelligence 360 paketinde

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.