CVE-2026-98106

EUVD-2026-86937
In the Linux kernel, the following vulnerability has been resolved:

drm/pagemap: Prevent double migration of device pages

A device-private folio migrated to system memory by a CPU fault can
remain reachable through the raw-PFN eviction path until migration
finalization drops the source reference.

If eviction selects the same device-private folio during this window,
it can attempt to migrate the folio again. The second migration can leave
an uncharged folio on an LRU list, causing folio_lruvec_lock_irqsave() to
retry indefinitely and resulting in a soft lockup and RCU stall.

Mark successfully migrated device-private folios using a low bit of
their zone_device_data before migration finalization. Make both CPU-fault
and raw-PFN migration paths skip device-private folios carrying this
flag.

Mask the flag when retrieving the drm_pagemap_zdd pointer and preserve
it when a device-private folio is split. Keeping the state on the physical
folio also avoids depending on a virtual address that may change before a
fault occurs.

v2:
- Replace the retired-PFN XArray with an embedded bitmap. (Matthew Brost)
- Mark every base page covered by a migrated folio so retirement remains
  valid if the folio is later split.

v3:
- Store the migrated state in a low bit of zone_device_data instead of
  adding virtual-range and bitmap tracking to the ZDD. (Matthew Brost)
- Mask the flag when retrieving the ZDD and preserve it when splitting
  a folio.
- Drop the pre-existing fixes already covered by Matthew Brost's series:
  https://patchwork.freedesktop.org/series/171651/

v4:
- Advance by the folio size only for migration entries marked with
  MIGRATE_PFN_COMPOUND. (Sashiko)

v5:
- Simplify ZDD flag updates and folio iteration. (Matthew Brost)
- Skip retired device-private folios in the CPU-fault path. (Matthew Brost)
- Preserve flag bits while taking a new ZDD reference for split folios.

v6:
- Restore MIGRATE_PFN_COMPOUND-aware stepping so non-compound migration
  entries are processed one at a time. (Sashiko)
- Drop the pre-existing fixes already covered by Matthew Brost's series:
  https://patchwork.freedesktop.org/series/171651/

The lockup was observed as:
[10109.860465] watchdog: BUG: soft lockup - CPU#9 stuck for 26s! [kworker/u65:5:6557]
[10109.860524] Tainted: [S]=CPU_OUT_OF_SPEC, [O]=OOT_MODULE
[10109.860524] Hardware name: ASUS System Product Name/PRIME Z790-P WIFI, BIOS 0812 02/24/2023
[10109.860525] Workqueue: xe_page_fault_work_queue xe_pagefault_queue_work [xe]
[10109.860644] RIP: 0010:_raw_spin_unlock_irqrestore+0x57/0x80
[10109.860655] Call Trace:
[10109.860655]  <TASK>
[10109.860657]  folio_lruvec_lock_irqsave+0x216/0x220
[10109.860661]  ? __pfx_lru_add+0x10/0x10
[10109.860665]  folio_batch_move_lru+0xc8/0x450
[10109.860670]  ? lock_acquire+0xc4/0x2d0
[10109.860674]  ? __folio_batch_add_and_move+0x60/0x2e0
[10109.860677]  ? folio_migrate_mapping+0xa6/0x110
[10109.860679]  ? folio_migrate_flags+0x13b/0x1b0
[10109.860681]  ? __pfx_lru_add+0x10/0x10
[10109.860683]  __folio_batch_add_and_move+0xe7/0x2e0
[10109.860685]  ? dma_iova_try_alloc+0xb0/0x140
[10109.860689]  folio_add_lru+0x64/0x80
[10109.860691]  __migrate_device_finalize+0x12c/0x270
[10109.860695]  migrate_device_finalize+0x10/0x20
[10109.860698]  drm_pagemap_evict_to_ram+0x185/0x370 [drm_gpusvm_helper]
[10109.860704]  ? drm_pagemap_evict_to_ram+0x96/0x370 [drm_gpusvm_helper]
[10109.860709]  xe_svm_bo_evict+0x15/0x20 [xe]
[10109.860819]  ? xe_svm_bo_evict+0x15/0x20 [xe]
[10109.860921]  xe_bo_move+0x107e/0x1570 [xe]
[10109.860992]  ? xe_ttm_tt_create+0x168/0x340 [xe]
[10109.861059]  ? __up_read+0x98/0x2b0
[10109.861061]  ? lock_is_held_type+0xa3/0x130
[10109.861067]  ttm_bo_handle_move_mem+0xe8/0x1e0 [ttm]
[10109.861075]  ttm_bo_evict+0x141/0x1c0 [ttm]
[10109.861081]  ttm_bo_evict_cb+0x9f/0x100 [ttm]
[10109.861086]  ttm_lru_walk_for_evict+0x84/0x190 [ttm]
[10109.861091]  ? xe_ttm_vram_mgr_new+0x258/0x3a0 [xe]
[10109.861198]  ttm_bo_alloc_resource+0x219/0
---truncated---
ProviderTypeBase ScoreAtk. VectorAtk. ComplexityPriv. RequiredVector
NISTPrimary
UNKNOWN
---
Awaiting analysis
This vulnerability is currently awaiting analysis.
Base Score
CVSS 3.x
EPSS Score
Percentile: Unknown
Debian logo
Debian Releases
Debian Product
Codename
linux
bookworm
6.1.176-1
fixed
bookworm (security)
6.1.187-1
fixed
forky
vulnerable
sid
7.2.7-1
fixed
trixie
6.12.107-1
fixed
trixie (security)
6.12.107-1
fixed
Ubuntu logo
Ubuntu Releases
Ubuntu Product
Codename
linux
bionic
needs-triage
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
trusty
needs-triage
xenial
needs-triage
linux-hwe
bionic
ignored
jammy
dne
noble
dne
resolute
dne
xenial
needs-triage
linux-hwe-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-hwe-5.8
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-hwe-5.11
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-hwe-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-hwe-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-hwe-5.19
jammy
ignored
noble
dne
resolute
dne
linux-hwe-6.2
jammy
ignored
noble
dne
resolute
dne
linux-hwe-6.5
jammy
ignored
noble
dne
resolute
dne
linux-hwe-6.8
jammy
needs-triage
noble
dne
resolute
dne
linux-hwe-6.11
jammy
dne
noble
ignored
resolute
dne
linux-hwe-6.14
jammy
dne
noble
needs-triage
resolute
dne
linux-hwe-6.17
jammy
dne
noble
needs-triage
resolute
dne
linux-hwe-7.0
jammy
dne
noble
needs-triage
resolute
dne
linux-hwe-edge
bionic
ignored
jammy
dne
noble
dne
resolute
dne
xenial
ignored
linux-lts-xenial
jammy
dne
noble
dne
resolute
dne
trusty
needs-triage
linux-kvm
bionic
needs-triage
focal
needs-triage
jammy
needs-triage
noble
dne
resolute
dne
xenial
needs-triage
linux-allwinner-5.19
jammy
ignored
noble
dne
resolute
dne
linux-aws
bionic
needs-triage
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
trusty
needs-triage
xenial
needs-triage
linux-aws-5.0
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-aws-5.3
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-aws-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-aws-5.8
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-aws-5.11
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-aws-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-aws-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-aws-5.19
jammy
ignored
noble
dne
resolute
dne
linux-aws-6.2
jammy
ignored
noble
dne
resolute
dne
linux-aws-6.5
jammy
ignored
noble
dne
resolute
dne
linux-aws-6.8
jammy
needs-triage
noble
dne
resolute
dne
linux-aws-6.14
jammy
dne
noble
needs-triage
resolute
dne
linux-aws-6.17
jammy
dne
noble
needs-triage
resolute
dne
linux-aws-7.0
jammy
dne
noble
needs-triage
resolute
dne
linux-aws-hwe
jammy
dne
noble
dne
resolute
dne
xenial
needs-triage
linux-azure
bionic
ignored
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
trusty
needs-triage
xenial
needs-triage
linux-azure-4.15
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-azure-5.3
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-azure-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-azure-5.8
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-azure-5.11
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-azure-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-azure-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-azure-5.19
jammy
ignored
noble
dne
resolute
dne
linux-azure-6.2
jammy
ignored
noble
dne
resolute
dne
linux-azure-6.5
jammy
ignored
noble
dne
resolute
dne
linux-azure-6.8
jammy
needs-triage
noble
dne
resolute
dne
linux-azure-6.11
jammy
dne
noble
ignored
resolute
dne
linux-azure-6.14
jammy
dne
noble
needs-triage
resolute
dne
linux-azure-6.17
jammy
dne
noble
needs-triage
resolute
dne
linux-azure-7.0
jammy
dne
noble
needs-triage
resolute
dne
linux-azure-fde
focal
ignored
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
linux-azure-fde-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-azure-fde-5.19
jammy
ignored
noble
dne
resolute
dne
linux-azure-fde-6.2
jammy
ignored
noble
dne
resolute
dne
linux-azure-fde-6.8
jammy
needs-triage
noble
dne
resolute
dne
linux-azure-fde-6.14
jammy
dne
noble
needs-triage
resolute
dne
linux-azure-fde-6.17
jammy
dne
noble
needs-triage
resolute
dne
linux-azure-fde-7.0
jammy
dne
noble
needs-triage
resolute
dne
linux-azure-nvidia
jammy
dne
noble
needs-triage
resolute
dne
linux-azure-nvidia-6.14
jammy
dne
noble
needs-triage
resolute
dne
linux-bluefield
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-azure-edge
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-fips
bionic
needs-triage
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
xenial
needs-triage
linux-aws-fips
bionic
needs-triage
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-azure-fips
bionic
needs-triage
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-gcp-fips
bionic
needs-triage
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-gcp
bionic
ignored
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
xenial
needs-triage
linux-gcp-4.15
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-gcp-5.3
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-gcp-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-gcp-5.8
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-gcp-5.11
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-gcp-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-gcp-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-gcp-5.19
jammy
ignored
noble
dne
resolute
dne
linux-gcp-6.2
jammy
ignored
noble
dne
resolute
dne
linux-gcp-6.5
jammy
ignored
noble
dne
resolute
dne
linux-gcp-6.8
jammy
needs-triage
noble
dne
resolute
dne
linux-gcp-6.11
jammy
dne
noble
ignored
resolute
dne
linux-gcp-6.14
jammy
dne
noble
needs-triage
resolute
dne
linux-gcp-6.17
jammy
dne
noble
needs-triage
resolute
dne
linux-gcp-7.0
jammy
dne
noble
needs-triage
resolute
dne
linux-gke
focal
ignored
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
linux-gke-4.15
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-gke-5.4
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-gke-5.15
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-gkeop
focal
ignored
jammy
needs-triage
noble
needs-triage
resolute
dne
linux-gkeop-5.4
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-gkeop-5.15
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-ibm
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
linux-ibm-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-ibm-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-ibm-6.8
jammy
needs-triage
noble
dne
resolute
dne
linux-intel-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-intel-iotg
jammy
needs-triage
noble
dne
resolute
dne
linux-intel-iotg-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-iot
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-intel-iot-realtime
jammy
needs-triage
noble
dne
resolute
dne
linux-lowlatency
jammy
needs-triage
noble
needs-triage
resolute
dne
linux-lowlatency-hwe-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-lowlatency-hwe-5.19
jammy
ignored
noble
dne
resolute
dne
linux-lowlatency-hwe-6.2
jammy
ignored
noble
dne
resolute
dne
linux-lowlatency-hwe-6.5
jammy
ignored
noble
dne
resolute
dne
linux-lowlatency-hwe-6.8
jammy
needs-triage
noble
dne
resolute
dne
linux-lowlatency-hwe-6.11
jammy
dne
noble
ignored
resolute
dne
linux-nvidia
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
linux-nvidia-6.2
jammy
ignored
noble
dne
resolute
dne
linux-nvidia-6.5
jammy
ignored
noble
dne
resolute
dne
linux-nvidia-6.8
jammy
needs-triage
noble
dne
resolute
dne
linux-nvidia-6.11
jammy
dne
noble
ignored
resolute
dne
linux-nvidia-6.17
jammy
dne
noble
needs-triage
resolute
dne
linux-nvidia-7.0
jammy
dne
noble
needs-triage
resolute
dne
linux-nvidia-bos
jammy
dne
noble
dne
resolute
needs-triage
linux-nvidia-lowlatency
jammy
dne
noble
needs-triage
resolute
dne
linux-nvidia-tegra
jammy
needs-triage
noble
needs-triage
resolute
dne
linux-nvidia-tegra-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-nvidia-tegra-igx
jammy
needs-triage
noble
dne
resolute
dne
linux-oracle
bionic
needs-triage
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
xenial
needs-triage
linux-oracle-5.0
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-oracle-5.3
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-oracle-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-oracle-5.8
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-oracle-5.11
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-oracle-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-oracle-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-oracle-6.5
jammy
ignored
noble
dne
resolute
dne
linux-oracle-6.8
jammy
needs-triage
noble
dne
resolute
dne
linux-oracle-6.14
jammy
dne
noble
needs-triage
resolute
dne
linux-oracle-6.17
jammy
dne
noble
needs-triage
resolute
dne
linux-oracle-7.0
jammy
dne
noble
needs-triage
resolute
dne
linux-oem
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-oem-5.6
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-oem-5.10
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-oem-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-oem-5.14
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-oem-5.17
jammy
ignored
noble
dne
resolute
dne
linux-oem-6.0
jammy
ignored
noble
dne
resolute
dne
linux-oem-6.1
jammy
ignored
noble
dne
resolute
dne
linux-oem-6.5
jammy
ignored
noble
dne
resolute
dne
linux-oem-6.8
jammy
dne
noble
ignored
resolute
dne
linux-oem-6.11
jammy
dne
noble
ignored
resolute
dne
linux-oem-6.14
jammy
dne
noble
needs-triage
resolute
dne
linux-oem-6.17
jammy
dne
noble
needs-triage
resolute
dne
linux-oem-7.0
jammy
dne
noble
dne
resolute
needs-triage
linux-raspi
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
linux-raspi2
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-raspi-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-raspi-realtime
jammy
dne
noble
needs-triage
resolute
dne
linux-realtime
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
linux-realtime-6.8
jammy
dne
noble
dne
resolute
dne
linux-realtime-6.14
jammy
dne
noble
dne
resolute
dne
linux-riscv
focal
ignored
jammy
ignored
noble
ignored
resolute
needs-triage
linux-riscv-5.8
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-riscv-5.11
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-riscv-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-riscv-5.19
jammy
ignored
noble
dne
resolute
dne
linux-riscv-6.5
jammy
ignored
noble
dne
resolute
dne
linux-riscv-6.8
jammy
needs-triage
noble
dne
resolute
dne
linux-riscv-6.14
jammy
dne
noble
ignored
resolute
dne
linux-riscv-6.17
jammy
dne
noble
needs-triage
resolute
dne
linux-riscv-7.0
jammy
dne
noble
needs-triage
resolute
dne
linux-starfive-5.19
jammy
ignored
noble
dne
resolute
dne
linux-starfive-6.2
jammy
ignored
noble
dne
resolute
dne
linux-starfive-6.5
jammy
ignored
noble
dne
resolute
dne
linux-xilinx
jammy
dne
noble
needs-triage
resolute
dne
linux-xilinx-zynqmp
focal
needs-triage
jammy
needs-triage
noble
dne
resolute
dne
linux-realtime-6.17
jammy
dne
noble
dne
resolute
dne