{"id":29260,"date":"2026-09-25T20:32:16","date_gmt":"2026-09-25T12:32:16","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98106"},"modified":"2026-09-25T20:32:16","modified_gmt":"2026-09-25T12:32:16","slug":"cve-2026-98106","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98106","title":{"rendered":"CVE-2026-98106 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\ndrm\/pagemap: Prevent"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>drm\/pagemap: Prevent double migration of device pages<\/p>\n<p>A device-private folio migrated to system memory by a CPU fault can<br \/>\nremain reachable through the raw-PFN eviction path until migration<br \/>\nfinalization drops the source reference.<\/p>\n<p>If eviction selects the same device-private folio during this window,<br \/>\nit can attempt to migrate the folio again. The second migration can leave<br \/>\nan uncharged folio on an LRU list, causing folio_lruvec_lock_irqsave() to<br \/>\nretry indefinitely and resulting in a soft lockup and RCU stall.<\/p>\n<p>Mark successfully migrated device-private folios using a low bit of<br \/>\ntheir zone_device_data before migration finalization. Make both CPU-fault<br \/>\nand raw-PFN migration paths skip device-private folios carrying this<br \/>\nflag.<\/p>\n<p>Mask the flag when retrieving the drm_pagemap_zdd pointer and preserve<br \/>\nit when a device-private folio is split. Keeping the state on the physical<br \/>\nfolio also avoids depending on a virtual address that may change before a<br \/>\nfault occurs.<\/p>\n<p>v2:<br \/>\n&#8211; Replace the retired-PFN XArray with an embedded bitmap. (Matthew Brost)<br \/>\n&#8211; Mark every base page covered by a migrated folio so retirement remains<br \/>\n  valid if the folio is later split.<\/p>\n<p>v3:<br \/>\n&#8211; Store the migrated state in a low bit of zone_device_data instead of<br \/>\n  adding virtual-range and bitmap tracking to the ZDD. (Matthew Brost)<br \/>\n&#8211; Mask the flag when retrieving the ZDD and preserve it when splitting<br \/>\n  a folio.<br \/>\n&#8211; Drop the pre-existing fixes already covered by Matthew Brost&#8217;s series:<br \/>\n  https:\/\/patchwork.freedesktop.org\/series\/171651\/<\/p>\n<p>v4:<br \/>\n&#8211; Advance by the folio size only for migration entries marked with<br \/>\n  MIGRATE_PFN_COMPOUND. (Sashiko)<\/p>\n<p>v5:<br \/>\n&#8211; Simplify ZDD flag updates and folio iteration. (Matthew Brost)<br \/>\n&#8211; Skip retired device-private folios in the CPU-fault path. (Matthew Brost)<br \/>\n&#8211; Preserve flag bits while taking a new ZDD reference for split folios.<\/p>\n<p>v6:<br \/>\n&#8211; Restore MIGRATE_PFN_COMPOUND-aware stepping so non-compound migration<br \/>\n  entries are processed one at a time. (Sashiko)<br \/>\n&#8211; Drop the pre-existing fixes already covered by Matthew Brost&#8217;s series:<br \/>\n  https:\/\/patchwork.freedesktop.org\/series\/171651\/<\/p>\n<p>The lockup was observed as:<br \/>\n[10109.860465] watchdog: BUG: soft lockup &#8211; CPU#9 stuck for 26s! [kworker\/u65:5:6557]<br \/>\n[10109.860524] Tainted: [S]=CPU_OUT_OF_SPEC, [O]=OOT_MODULE<br \/>\n[10109.860524] Hardware name: ASUS System Product Name\/PRIME Z790-P WIFI, BIOS 0812 02\/24\/2023<br \/>\n[10109.860525] Workqueue: xe_page_fault_work_queue xe_pagefault_queue_work [xe]<br \/>\n[10109.860644] RIP: 0010:_raw_spin_unlock_irqrestore+0x57\/0x80<br \/>\n[10109.860655] Call Trace:<br \/>\n[10109.860655]<br \/>\n[10109.860657]  folio_lruvec_lock_irqsave+0x216\/0x220<br \/>\n[10109.860661]  ? __pfx_lru_add+0x10\/0x10<br \/>\n[10109.860665]  folio_batch_move_lru+0xc8\/0x450<br \/>\n[10109.860670]  ? lock_acquire+0xc4\/0x2d0<br \/>\n[10109.860674]  ? __folio_batch_add_and_move+0x60\/0x2e0<br \/>\n[10109.860677]  ? folio_migrate_mapping+0xa6\/0x110<br \/>\n[10109.860679]  ? folio_migrate_flags+0x13b\/0x1b0<br \/>\n[10109.860681]  ? __pfx_lru_add+0x10\/0x10<br \/>\n[10109.860683]  __folio_batch_add_and_move+0xe7\/0x2e0<br \/>\n[10109.860685]  ? dma_iova_try_alloc+0xb0\/0x140<br \/>\n[10109.860689]  folio_add_lru+0x64\/0x80<br \/>\n[10109.860691]  __migrate_device_finalize+0x12c\/0x270<br \/>\n[10109.860695]  migrate_device_finalize+0x10\/0x20<br \/>\n[10109.860698]  drm_pagemap_evict_to_ram+0x185\/0x370 [drm_gpusvm_helper]<br \/>\n[10109.860704]  ? drm_pagemap_evict_to_ram+0x96\/0x370 [drm_gpusvm_helper]<br \/>\n[10109.860709]  xe_svm_bo_evict+0x15\/0x20 [xe]<br \/>\n[10109.860819]  ? xe_svm_bo_evict+0x15\/0x20 [xe]<br \/>\n[10109.860921]  xe_bo_move+0x107e\/0x1570 [xe]<br \/>\n[10109.860992]  ? xe_ttm_tt_create+0x168\/0x340 [xe]<br \/>\n[10109.861059]  ? __up_read+0x98\/0x2b0<br \/>\n[10109.861061]  ? lock_is_held_type+0xa3\/0x130<br \/>\n[10109.861067]  ttm_bo_handle_move_mem+0xe8\/0x1e0 [ttm]<br \/>\n[10109.861075]  ttm_bo_evict+0x141\/0x1c0 [ttm]<br \/>\n[10109.861081]  ttm_bo_evict_cb+0x9f\/0x100 [ttm]<br \/>\n[10109.861086]  ttm_lru_walk_for_evict+0x84\/0x190 [ttm]<br \/>\n[10109.861091]  ? xe_ttm_vram_mgr_new+0x258\/0x3a0 [xe]<br \/>\n[10109.861198]  ttm_bo_alloc_resource+0x219\/0<br \/>\n&#8212;truncated&#8212;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>drm\/pagemap: Prevent double migration of device pages<\/p>\n<p>A device-private folio migrated to system memory by a CPU fault can<br \/>\nremain r<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-29260","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/29260","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=29260"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=29260"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=29260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}