CVE-2022-49781
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: perf/x86/amd: amd_pmu_enable_all, perf NMI ve throttling arasındaki yarış durumu nedeniyle oluşan çökmeyi düzeltme amd_pmu_enable_all() şunları yapar: if (!test_bit(idx, cpuc->active_mask)) continue; amd_pmu_enable_event(cpuc->events[idx]); Bu iki adım arasında başka bir olayın perf NMI'ı gelebilir. Perf NMI işleyicisi dahili olarak, nmi-intercepted amd_pmu_enable_all()'ın etkinleştirmek üzere olduğu olay da dahil olmak üzere _tüm_ olayları devre dışı bırakır ve tekrar etkinleştirir. Eğer kasıt dışı olarak etkinleşen bu olay çok düşük bir örnekleme dönemine sahipse ve hemen ardışık NMI'lara neden olup olayın throttle edilmesine yol açarsa, cpuc->events[idx] ve cpuc->active_mask, x86_pmu_stop() tarafından temizlenir. Bu durum, amd_pmu_enable_all() NMI'ların işlenmesinden sonra devam ettiğinde, amd_pmu_enable_event()'ın event=NULL ile çağrılmasıyla sonuçlanır. Bu da bir çekirdek çökmesine neden olur: BUG: kernel NULL pointer dereference, address: 0000000000000198 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page [...] Call Trace: <TASK> amd_pmu_enable_all+0x68/0xb0 ctx_resched+0xd9/0x150 event_function+0xb8/0x130 ? hrtimer_start_range_ns+0x141/0x4a0 ? perf_duration_warn+0x30/0x30 remote_function+0x4d/0x60 __flush_smp_call_function_queue+0xc4/0x500 flush_smp_call_function_queue+0x11d/0x1b0 do_idle+0x18f/0x2d0 cpu_startup_entry+0x19/0x20 start_secondary+0x121/0x160 secondary_startup_64_no_verify+0xe5/0xeb </TASK> Perf NMI işleyicisi içindeki amd_pmu_disable_all()/amd_pmu_enable_all() çağrıları yakın zamanda BRS etkinleştirilmesinin bir parçası olarak eklenmiştir ancak bunlara gerçekten ihtiyacımız olduğundan emin değilim. Sadece başlangıçta BRS'yi devre dışı bırakabilir ve NMI'dan dönerken tekrar etkinleştirebiliriz. Bu, active_masks değerleri ayarlanmış olan ancak henüz donanım PMU'sunda etkinleştirilmemiş olan olayları etkinleştirmeyerek sorunu çözecektir.
Nasıl düzeltilir
- linux linux_kernel6.0.10 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 5.19 ≤ v < 6.0.10, 6.1 | 6.0.10 |
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.