CVE-2026-31398
Açıklama
Linux kernel'de aşağıdaki güvenlik açığı giderilmiştir: mm/rmap: lazyfree foliolarda hatalı pte geri yüklemesi düzeltildi Anonim lazyfree folioların eşlemini kaldırma işlemi folio_unmap_pte_batch ile toplu olarak gerçekleştirilmektedir. Eğer toplu işlem yazılabilir ve yazılamaz bitlerin bir karışımını içeriyorsa, tüm grubun yazılabilir olarak ayarlanmasıyla sonuçlanabilir. Bu durum, toplu işlem sırasında yazılabilir bite riayet edilerek düzeltilmiştir. Bir lazyfree folionun başarılı eşleme kaldırma işleminde soft-dirty biti kaybolsa da, hem yazılabilir bit hem de soft-dirty bit açısından tutarlılığı sağlamak için toplu işlem sırasında bu bite riayet edilerek pte geri yüklemesinde korunması sağlanmıştır. Aşağıdaki yeniden üretici (reproducer) kodu yazılarak çekirdek çökertilmiştir. Yeniden üreticinin açıklaması (64K mTHP her zaman açık olarak ayarlanmış): 64K büyük bir folioda hata oluşur. VMA, MADV_DONTFORK ile orta noktadan bölünür. fork() sonrası ebeveyn; 8 yazılabilir pte ve 8 yazılamaz pte ile folioya işaret eder. VMAlar MADV_DOFORK ile birleştirilir, böylece folio_unmap_pte_batch() tüm 16 pte'yi tek bir grup olarak belirleyebilir. Folioyu lazyfree olarak işaretlemek için aralık üzerinde MADV_FREE uygulanır. Pte'yi kirletmek için belleğe yazılır, sonunda rmap foliovu kirletecektir. Ardından reclaim tetiklendiğinde, pte geri yükleme yoluna girilecek ve çekirdek aşağıda verilen izle (trace) ile çökecektir. BUG şu noktada meydana gelir: BUG_ON(atomic_inc_return(&ptc->anon_map_count) > 1 && rw); Kod yolu, anonim sayfanın sayfa tablosuna yazılabilir olarak eşlenmesini talep etmektedir. BUG_ON() fonksiyonunun tetiklenmesi, böyle bir yazılabilir sayfanın birden fazla işlemin sayfa tablolarına eşlendiğini gösterir ki bu durum anonim bellek/CoW semantiğini bozar. [ 21.134473] kernel BUG at mm/page_table_check.c:118! [ 21.134497] Internal error: Oops - BUG: 00000000f2000800 [#1] SMP [ 21.135917] Modules linked in: [ 21.136085] CPU: 1 UID: 0 PID: 1735 Comm: dup-lazyfree Not tainted 7.0.0-rc1-00116-g018018a17770 #1028 PREEMPT [ 21.136858] Hardware name: linux,dummy-virt (DT) [ 21.137019] pstate: 21400005 (nzCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--) [ 21.137308] pc : page_table_check_set+0x28c/0x2a8 [ 21.137607] lr : page_table_check_set+0x134/0x2a8 [ 21.137885] sp : ffff80008a3b3340 [ 21.138124] x29: ffff80008a3b3340 x28: fffffdffc3d14400 x27: ffffd1a55e03d000 [ 21.138623] x26: 0040000000000040 x25: ffffd1a55f7dd000 x24: 0000000000000001 [ 21.139045] x23: 0000000000000001 x22: 0000000000000001 x21: ffffd1a55f217f30 [ 21.139629] x20: 0000000000134521 x19: 0000000000134519 x18: 005c43e000040000 [ 21.140027] x17: 0001400000000000 x16: 0001700000000000 x15: 000000000000ffff [ 21.140578] x14: 000000000000000c x13: 005c006000000000 x12: 0000000000000020 [ 21.140828] x11: 0000000000000000 x10: 005c000000000000 x9 : ffffd1a55c079ee0 [ 21.141077] x8 : 0000000000000001 x7 : 005c03e000040000 x6 : 000000004000ffff [ 21.141490] x5 : ffff00017fffce00 x4 : 0000000000000001 x3 : 0000000000000002 [ 21.141741] x2 : 0000000000134510 x1 : 0000000000000000 x0 : ffff0000c08228c0 [ 21.141991] Call trace: [ 21.142093] page_table_check_set+0x28c/0x2a8 (P) [ 21.142265] __page_table_check_ptes_set+0x144/0x1e8 [ 21.142441] __set_ptes_anysz.constprop.0+0x160/0x1a8 [ 21.142766] contpte_set_ptes+0xe8/0x140 [ 21.142907] try_to_unmap_one+0x10c4/0x10d0 [ 21.143177] rmap_walk_anon+0x100/0x250 [ 21.143315] try_to_unmap+0xa0/0xc8 [ 21.143441] shrink_folio_list+0x59c/0x18a8 [ 21.143759] shrink_lruvec+0x664/0xbf0 [ 21.144043] shrink_node+0x218/0x878 [ 21.144285] __node_reclaim.constprop.0+0x98/0x338 [ 21.144763] user_proactive_reclaim+0x2a4/0x340 [ 21.145056] reclaim_store+0x3c/0x60 [ 21.145216] dev_attr_store+0x20/0x40 [ 21.145585] sysfs_kf_write+0x84/0xa8 [ 21.145835] kernfs_fop_write_iter+0x130/0x1c8 [ 21.145994] vfs_write+0x2b8/0x368 [ 21.146119] ksys_write+0x70/0x110 [ 21.146240] __arm64_sys_write+0x24/0x38 [ 21.146380] invoke_syscall+0x50/0x120 [ 21.146513] el0_svc_common.constprop.0+0x48/0xf8 [ 21.146679] do_el0_svc+0x28/0x40 [ 21.146798] el0_svc+0x34/0x110 [ 21.146926] el0t ---truncated---
Nasıl düzeltilir
- linux linux_kernel6.18.20, 6.19.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 | 6.15 ≤ v < 6.18.20, 6.19 ≤ v < 6.19.10, 7.0 | 6.18.20, 6.19.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.