← Back to KEV catalog

CVE-2025-21861

Exploitation: none CVSS 5.5 MEDIUM

CVSS base score: 5.5 (Medium) CISA · v3.1

Score assigned by CISA's Vulnrichment program; the vendor's CVE record did not include one. Vulnrichment source record →

Vendor: Linux   Product: Linux

Description

In the Linux kernel, the following vulnerability has been resolved: mm/migrate_device: don't add folio to be freed to LRU in migrate_device_finalize() If migration succeeded, we called folio_migrate_flags()->mem_cgroup_migrate() to migrate the memcg from the old to the new folio. This will set memcg_data of the old folio to 0. Similarly, if migration failed, memcg_data of the dst folio is left unset. If we call folio_putback_lru() on such folios (memcg_data == 0), we will add the folio to be freed to the LRU, making memcg code unhappy. Running the hmm selftests: # ./hmm-tests ... # RUN hmm.hmm_device_private.migrate ... [ 102.078007][T14893] page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x7ff27d200 pfn:0x13cc00 [ 102.079974][T14893] anon flags: 0x17ff00000020018(uptodate|dirty|swapbacked|node=0|zone=2|lastcpupid=0x7ff) [ 102.082037][T14893] raw: 017ff00000020018 dead000000000100 dead000000000122 ffff8881353896c9 [ 102.083687][T14893] raw: 00000007ff27d200 0000000000000000 00000001ffffffff 0000000000000000 [ 102.085331][T14893] page dumped because: VM_WARN_ON_ONCE_FOLIO(!memcg && !mem_cgroup_disabled()) [ 102.087230][T14893] ------------[ cut here ]------------ [ 102.088279][T14893] WARNING: CPU: 0 PID: 14893 at ./include/linux/memcontrol.h:726 folio_lruvec_lock_irqsave+0x10e/0x170 [ 102.090478][T14893] Modules linked in: [ 102.091244][T14893] CPU: 0 UID: 0 PID: 14893 Comm: hmm-tests Not tainted 6.13.0-09623-g6c216bc522fd #151 [ 102.093089][T14893] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-2.fc40 04/01/2014 [ 102.094848][T14893] RIP: 0010:folio_lruvec_lock_irqsave+0x10e/0x170 [ 102.096104][T14893] Code: ... [ 102.099908][T14893] RSP: 0018:ffffc900236c37b0 EFLAGS: 00010293 [ 102.101152][T14893] RAX: 0000000000000000 RBX: ffffea0004f30000 RCX: ffffffff8183f426 [ 102.102684][T14893] RDX: ffff8881063cb880 RSI: ffffffff81b8117f RDI: ffff8881063cb880 [ 102.104227][T14893] RBP: 0000000000000000 R08: 0000000000000005 R09: 0000000000000000 [ 102.105757][T14893] R10: 0000000000000001 R11: 0000000000000002 R12: ffffc900236c37d8 [ 102.107296][T14893] R13: ffff888277a2bcb0 R14: 000000000000001f R15: 0000000000000000 [ 102.108830][T14893] FS: 00007ff27dbdd740(0000) GS:ffff888277a00000(0000) knlGS:0000000000000000 [ 102.110643][T14893] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 102.111924][T14893] CR2: 00007ff27d400000 CR3: 000000010866e000 CR4: 0000000000750ef0 [ 102.113478][T14893] PKRU: 55555554 [ 102.114172][T14893] Call Trace: [ 102.114805][T14893] <TASK> [ 102.115397][T14893] ? folio_lruvec_lock_irqsave+0x10e/0x170 [ 102.116547][T14893] ? __warn.cold+0x110/0x210 [ 102.117461][T14893] ? folio_lruvec_lock_irqsave+0x10e/0x170 [ 102.118667][T14893] ? report_bug+0x1b9/0x320 [ 102.119571][T14893] ? handle_bug+0x54/0x90 [ 102.120494][T14893] ? exc_invalid_op+0x17/0x50 [ 102.121433][T14893] ? asm_exc_invalid_op+0x1a/0x20 [ 102.122435][T14893] ? __wake_up_klogd.part.0+0x76/0xd0 [ 102.123506][T14893] ? dump_page+0x4f/0x60 [ 102.124352][T14893] ? folio_lruvec_lock_irqsave+0x10e/0x170 [ 102.125500][T14893] folio_batch_move_lru+0xd4/0x200 [ 102.126577][T14893] ? __pfx_lru_add+0x10/0x10 [ 102.127505][T14893] __folio_batch_add_and_move+0x391/0x720 [ 102.128633][T14893] ? __pfx_lru_add+0x10/0x10 [ 102.129550][T14893] folio_putback_lru+0x16/0x80 [ 102.130564][T14893] migrate_device_finalize+0x9b/0x530 [ 102.131640][T14893] dmirror_migrate_to_device.constprop.0+0x7c5/0xad0 [ 102.133047][T14893] dmirror_fops_unlocked_ioctl+0x89b/0xc80 Likely, nothing else goes wrong: putting the last folio reference will remove the folio from the LRU again. So besides memcg complaining, adding the folio to be freed to the LRU is just an unnecessary step. The new flow resembles what we have in migrate_folio_move(): add the dst to the lru, rem ---truncated---

Research & News Coverage

No mentions found in monitored research blogs or news feeds.

Referenced in Advisories

DateAdvisoryIssuer
2026-10-22 ICSA-26-295-11: Siemens SIMATIC S7-1500 CPU 1518(F)-4 PN/DP MFP CISA
2026-07-28 ICSA-26-209-04: Siemens SIMATIC S7-1500 CPU 1518(F)-4 PN/DP MFP CISA

Lifecycle Timeline

Each milestone comes from a different source, so gaps between them are gaps in what those sources publish, not evidence that nothing happened. EPSS history for this CVE holds 4 points from 2026-11-05, tracked daily from 2026-11-05; earlier points are weekly, which dates a spike to within a week. Peak probability 0.2% on 2026-11-05.

Published Applicability

Red Hat CSAF/VEX 0 affected · 612 fixed · 90 not affected
OSV.dev (incl. GHSA) 15 affected · 15 fixed · 0 not affected
CVE List v5 (CNA container) 9 affected · 0 fixed · 9 not affected
CVE List v5 (ADP/Vulnrichment) 6 affected · 0 fixed · 0 not affected

Check whether a specific version is affected →

What each source publishes about which product versions carry this vulnerability, kept as written rather than merged. Absence here means no source has published applicability data, not that nothing is affected.

Detection & Exploitation

Exploit / Pen Test
none published
Network IDS/IPS
none published
Host / SIEM
none published

Coverage across public collections only: Nuclei and OpenVAS NVT (scan); Snort and Suricata ET Open (network); Sigma and YARA (host/SIEM); Metasploit, Exploit-DB, public GitHub repositories and NVD exploit references (exploit). Absence here means nothing public was found, not that detection is impossible.
GitHub PoC repositories are collected automatically by PoC-in-GitHub (CC0) and filtered to repositories that are still online, contain code, and are starred or at least two weeks old. They are still not vetted: some are fakes and some are malware. Treat them as evidence that code was published, not as code to run.
NVD exploit references are links NVD's analysts tag as exploits; they confirm an exploit was referenced but carry no date. This product uses data from the NVD but is not endorsed or certified by the NVD.
OpenVAS coverage derives from the Greenbone Community Feed, made available under the Open Database License (ODbL) v1.0; its individual Vulnerability Tests are licensed GNU GPL v2.

No exploit-tool sightings recorded for this CVE.

Metasploit is dated by the first commit of the module file, Exploit-DB by its publication date, and GitHub repositories by their creation date. GitHub PoC repositories are filtered (still online, contain code, starred or at least two weeks old) but not vetted: some are fakes and some are malware, so they show that code was published, not that it works or is safe to run. Evidence tiers are explained on the About page.

Distribution Status

Debian · linux bookworm 6.1.158-1 trixie 6.12.17-1 forky 6.12.17-1 sid 6.12.17-1 scope: local

Where the distribution has shipped a fix, and in which version. Green means the release has resolved it, amber that it is still open. Data from the Debian Security Tracker, used under Debian's MIT / GPLv2+ terms. Debian is upstream of several other distributions, so a fix here often precedes theirs.

CISA Assessment (Vulnrichment / SSVC)

none
no
partial
5.5 MEDIUM
—
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
CWE-416 — Use After Free
2025-10-01

Federal Remediation Window (BOD 26-04)

No
no
partial control
If the asset isRemediate withinTable 1 row
Publicly exposed 60 days 8 of 16
Not publicly exposed Fix on system upgrade 16 of 16

BOD 26-04 replaced the single KEV deadline of BOD 22-01 with four inputs: whether the asset is publicly exposed, KEV status, whether exploitation is automatable, and technical impact. Exposure belongs to each agency's asset, not to the CVE, so both outcomes are shown. Automatable and technical impact come from the CISA assessment above. Days are calendar days; for KEV entries the clock starts on the date it was added, and otherwise when the agency identifies the vulnerability on an asset. Agencies make the final exposure call asset by asset, and may set shorter timelines.

D3FEND Countermeasures

Defensive techniques inferred by MITRE D3FEND from the underlying weakness (CWE-416) — general hardening and detection guidance for this weakness class, not a vendor patch for this specific CVE.

External References