CVE-2022-49851
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: riscv: ayrılmış bellek kurulumu düzeltildi Şu anda RISC-V, ayrılmış belleği cihaz ağacının "erken" kopyasını kullanarak kurmaktadır. Sonuç olarak, of_reserved_mem_lookup() kullanılarak bir ayrılmış bellek bölgesi alınmaya çalışıldığında, ayrılmış bellek bölgelerine giden işaretçi; erken, sanal bellek öncesi adresi kullandığından, tamponun adı kullanılmaya çalışıldığında bir kernel panic oluşmaktadır: Unable to handle kernel paging request at virtual address 00000000401c31ac Oops [#1] Modules linked in: CPU: 0 PID: 0 Comm: swapper Not tainted 6.0.0-rc1-00001-g0d9d6953d834 #1 Hardware name: Microchip PolarFire-SoC Icicle Kit (DT) epc : string+0x4a/0xea ra : vsnprintf+0x1e4/0x336 epc : ffffffff80335ea0 ra : ffffffff80338936 sp : ffffffff81203be0 gp : ffffffff812e0a98 tp : ffffffff8120de40 t0 : 0000000000000000 t1 : ffffffff81203e28 t2 : 7265736572203a46 s0 : ffffffff81203c20 s1 : ffffffff81203e28 a0 : ffffffff81203d22 a1 : 0000000000000000 a2 : ffffffff81203d08 a3 : 0000000081203d21 a4 : ffffffffffffffff a5 : 00000000401c31ac a6 : ffff0a00ffffff04 a7 : ffffffffffffffff s2 : ffffffff81203d08 s3 : ffffffff81203d00 s4 : 0000000000000008 s5 : ffffffff000000ff s6 : 0000000000ffffff s7 : 00000000ffffff00 s8 : ffffffff80d9821a s9 : ffffffff81203d22 s10: 0000000000000002 s11: ffffffff80d9821c t3 : ffffffff812f3617 t4 : ffffffff812f3617 t5 : ffffffff812f3618 t6 : ffffffff81203d08 status: 0000000200000100 badaddr: 00000000401c31ac cause: 000000000000000d [<ffffffff80338936>] vsnprintf+0x1e4/0x336 [<ffffffff80055ae2>] vprintk_store+0xf6/0x344 [<ffffffff80055d86>] vprintk_emit+0x56/0x192 [<ffffffff80055ed8>] vprintk_default+0x16/0x1e [<ffffffff800563d2>] vprintk+0x72/0x80 [<ffffffff806813b2>] _printk+0x36/0x50 [<ffffffff8068af48>] print_reserved_mem+0x1c/0x24 [<ffffffff808057ec>] paging_init+0x528/0x5bc [<ffffffff808031ae>] setup_arch+0xd0/0x592 [<ffffffff8080070e>] start_kernel+0x82/0x73c early_init_fdt_scan_reserved_mem(), early_init_dt_verify() tarafından doldurulan initial_boot_params üzerinde işlem yaptığı için herhangi bir argüman almaz. RISC-V'de early_init_dt_verify() iki kez çağrılır. Birincisi, CONFIG_BUILTIN_DTB etkinleştirilmemişse doğrudan setup_arch() içinde; ikincisi ise önyükleme sürecinin çok başında, parse_dtb() fonksiyonunun early_init_dt_scan_nodes() fonksiyonunu çağırmasıyla dolaylı olarak gerçekleşir. Bu ilk çağrı, initial_boot_params değerini ayarlamak için dtb_early_va adresini kullanır ve bu adres, önyükleme sürecinin ilerleyen aşamalarında early_init_fdt_scan_reserved_mem() çağrıldığında kullanılamaz durumdadır. Örneğin arm64 mimarisinde, early_init_dt_scan_nodes()'a yapılan karşılık gelen çağrı fixmap adreslerini kullanır ve aynı sorunla karşılaşmaz. İsimlerin doğru sanal bellek adreslerini kullanabilmesi için early_init_fdt_scan_reserved_mem() fonksiyonu, önyükleme dizisinin daha ileri bir noktasına, setup_arch() içindeki doğrudan early_init_dt_verify() çağrısından sonrasına taşınmıştır. Yukarıdaki açıklama CONFIG_BUILTIN_DTB ayarının yapılmadığını varsaymış olsa da, bu ayarın yapıldığı durumda da benzer şekilde çalışacaktır; çünkü unflatted_and_copy_device_tree() fonksiyonu da initial_boot_params değerini günceller.
Nasıl düzeltilir
- linux linux_kernel5.4, 5.10.155, 5.15.79, 6.0.9 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.3.8 ≤ v < 5.4, 5.4.1 ≤ v < 5.10.155, 5.11 ≤ v < 5.15.79, 5.16 ≤ v < 6.0.9, 5.4, 6.1 | 5.4, 5.10.155, 5.15.79, 6.0.9 |
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.