CVE-2022-49605
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılıb: igc: IGC_REMOVED məntiqi bərpa edildi və düzgün şəkildə tətbiq olundu igc drayver kodunun ilkin birləşdirilmiş versiyası (146740f9abc4 nömrəli commit vasitəsilə, "igc: Add support for PF") igc_rd32/wr32() MMIO accessorlarında aşağıdakı IGC_REMOVED yoxlamalarını ehtiva edirdi: 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]); /* oxumalar bütün F-ləri qaytarmamalıdır */ if (!(~value) && (!reg || !(~readl(hw_addr)))) hw->hw_addr = NULL; return value; } Və: #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) Məsələn, igb öz MMIO accessorlarında oxşar yoxlamalara və aşağıdakı kimi tətbiq edilmiş oxşar E1000_REMOVED makrosuna malikdir: #define E1000_REMOVED(h) unlikely(!(h)) Bu yoxlamalar cihazdan gələn 0xffffffff MMIO oxuma cavabını aşkar etmək və qeyd etmək üçün xidmət edir ki, bu da PCIe link flap və ya digər növ PCI şin xətası səbəbindən baş verə bilər və həmin andan etibarən MMIO oxuma və yazma əməliyyatlarının yerinə yetirilməsinin qarşısını alır. Lakin, IGC_REMOVED makrosu əvvəlcə tətbiq edilməmişdi: #ifndef IGC_REMOVED #define IGC_REMOVED(a) (0) #endif /* IGC_REMOVED */ Bu, sonrakı bir commitdə (3c215fb18e70 nömrəli commit, "igc: remove IGC_REMOVED function") belə bir əsaslandırma ilə IGC_REMOVED məntiqinin tamamilə silinməsinə səbəb oldu: belə yoxlamaların yalnız virtuallaşdırma üçün vacib olduğu və igc-nin virtuallaşdırmanı dəstəkləmədiyi bildirildi. Lakin PCIe cihazı virtuallaşdırmadan istifadə olunmasa belə ayrıla bilər və lazımi yoxlamalar olmadan, igc adapterini təsir edən PCIe şin xətası müxtəlif NULL göstəricilərin istifadəsinə (NULL pointer dereferences) səbəb olacaq, çünki xətadan sonra ilk giriş hw->hw_addr dəyişənini NULL təyin edəcək və növbəti girişlər kor-koranə bu artıq NULL olan göstəricini istifadə edəcəkdir. Bu yam (patch) igc_rd32/wr32() funksiyalarında IGC_REMOVED yoxlamalarını bərpa edir və IGC_REMOVED-i, hw_addr-in NULL olduğu unlikely() halını yoxlayaraq, igb-də olduğu kimi tətbiq edir. Bu dəyişiklik igc adapterində PCIe link flap baş verdikdə müşahidə olunan "oops" xətalarının qarşısını alır.
Necə düzəltmək olar
- linux linux_kernel5.4.208, 5.10.134, 5.15.58, 5.18.15 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| linux linux_kernel | 4.20 ≤ v < 5.4.208, 5.5 ≤ v < 5.10.134, 5.11 ≤ v < 5.15.58, 5.16 ≤ v < 5.18.15, 5.19 | 5.4.208, 5.10.134, 5.15.58, 5.18.15 |
Versiyanızı yoxlayın
Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.
Attack Surface Management
Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.