CVE-2026-31398

Yüksək

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: mm/rmap: lazyfree folio-ları üçün yanlış pte bərpası düzəldildi Biz anonim lazyfree folio-larının unmap prosesini folio_unmap_pte_batch vasitəsilə toplu şəkildə həyata keçiririk. Əgər topluda həm yazıla bilən, həm də yazıla bilməyən bitlərin qarışığı varsa, nəticədə bütün toplunu yazıla bilən kimi təyin edə bilərik. Bu problem, toplama zamanı yazıla bilən bitin nəzərə alınması ilə düzəldilmişdir. Lazyfree folio-sunun uğurlu unmap əməliyyatı zamanı soft-dirty biti itirsə də, həm yazıla bilən bit, həm də soft-dirty bit baxımından düzəlişi ardıcıl etmək üçün toplama zamanı bu bitin nəzərə alınması ilə pte bərpası zamanı o qorunur. Mən aşağıdakı reproduseri yazmağı və kernel-i çökdürməyi bacardım. Reproduserin izahı (64K mTHP həmişə aktiv olaraq təyin edilib): 64K böyük folio-da xəta. VMA-nı MADV_DONTFORK ilə orta nöqtədən bölün. fork() - valideyn 8 yazıla bilən pte və 8 yazıla bilməyən pte ilə folio-ya işarə edir. VMA-ları MADV_DOFORK ilə birləşdirin ki, folio_unmap_pte_batch() bütün 16 pte-ni bir toplu kimi müəyyən edə bilsin. Folio-nu lazyfree kimi qeyd etmək üçün diapazon üzərində MADV_FREE tətbiq edin. Pte-ni kirli (dirty) etmək üçün yaddaşa yazı yazın, sonda rmap folio-nu kirli edəcək. Daha sonra reclaim prosesini tetikləyin, biz pte bərpası yoluna daxil olacağıq və kernel aşağıda verilən izlə (trace) çökəcək. BUG burada baş verir: BUG_ON(atomic_inc_return(&ptc->anon_map_count) > 1 && rw); Kod yolu anonim səhifənin səhifə cədvəlinə (pagetable) yazıla bilən kimi xəritələnməsini tələb edir. BUG_ON()-un işə düşməsi o deməkdir ki, belə bir yazıla bilən səhifə birdən çox prosesin səhifə cədvəllərinə xəritələnib, bu isə anonim yaddaş/CoW semantikasını pozur. [ 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---

CiddilikYüksək
CVSS7.8
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc3 apr 2026
İlk görülmə3 apr 2026

Necə düzəltmək olar

Yeniləyin
  • linux linux_kernel6.18.20, 6.19.10 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel6.15 ≤ v < 6.18.20, 6.19 ≤ v < 6.19.10, 7.06.18.20, 6.19.10

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.

Intelligence 360 paketində

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.