Description
In the Linux kernel, the following vulnerability has been resolved:

memcg: keep folio's objcg same as its node

memcg_reparent_objcgs() has an inherent assumption that a folio's objcg is
the objcg of the folio's node. Folio migration across nodes breaks that
assumption: the new folio simply inherits the old folio's objcg while
living on a different node.

Once the assumption is broken, the reparenting of the folio's objcg and
the reparenting of the folio's LRU list are no longer atomic.
memcg_reparent_objcgs() handles one node per iteration and drops all the
locks in between, so the objcg gets reparented in the iteration for the
objcg's node while the LRU list gets spliced in the iteration for the
folio's node. Any LRU operation on that folio in between resolves its
lruvec through the objcg, and thus takes the lru_lock of the wrong memcg,
not the lru_lock of the list the folio is actually on.

Fix this by selecting the objcg by folio_nid() at charge time, and by
re-deriving it for the destination node in mem_cgroup_migrate() and
mem_cgroup_replace_folio().
Published: 2026-09-16
Score: 7.8 High
EPSS: < 1% Very Low
KEV: No
Impact: Kernel Memory Corruption
Action: Immediate Patch
AI Analysis

Impact

In the Linux kernel, a flaw in the memory control group (memcg) subsystem causes folio migration across NUMA nodes to violate a core assumption that a folio’s object cgroup (objcg) matches its node. The resulting desynchronisation between objcg reparenting and LRU list splicing creates a race condition that can corrupt kernel memory structures and, in the worst case, lead to a crash or arbitrary code execution. The vulnerability is a conflict of locks: an LRU operation may lock the wrong memcg, allowing an attacker to craft a scenario where kernel data is mis‑managed.

Affected Systems

All Linux kernel builds that include the memcg reparenting code are affected. Because the version information is not specified, any system running a Linux kernel prior to the application of the patch that fixes the mis‑synchronisation is vulnerable.

Risk and Exploitability

The CVSS score of 7.8 marks this issue as high severity, yet the EPSS score of less than 1% indicates that the likelihood of an observed exploit is very low. The vulnerability is not listed in the CISA KEV catalog. Exploitation would require an actor to force a folio to migrate across nodes while LRU operations occur, which could be achieved through high memory pressure or by running memory‑intensive code that triggers page migration. Although this is not trivial, the potential for kernel corruption warrants timely remediation.

Generated by OpenCVE AI on September 18, 2026 at 03:58 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Update the Linux kernel to a version that includes the memcg reparenting fix.
  • If an updated kernel is not yet available, reduce NUMA memory pressure by binding critical workloads to a single node or by limiting large memory allocations that trigger page migration.
  • Continuously monitor system logs for frequent page fault or BUG indicators and apply kernel hardening patches as soon as they become available.

Generated by OpenCVE AI on September 18, 2026 at 03:58 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 18 Sep 2026 04:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-362

Wed, 16 Sep 2026 14:45:00 +0000

Type Values Removed Values Added
Metrics cvssV3_1

{'score': 7.8, 'vector': 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H'}


Wed, 16 Sep 2026 10:45:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: memcg: keep folio's objcg same as its node memcg_reparent_objcgs() has an inherent assumption that a folio's objcg is the objcg of the folio's node. Folio migration across nodes breaks that assumption: the new folio simply inherits the old folio's objcg while living on a different node. Once the assumption is broken, the reparenting of the folio's objcg and the reparenting of the folio's LRU list are no longer atomic. memcg_reparent_objcgs() handles one node per iteration and drops all the locks in between, so the objcg gets reparented in the iteration for the objcg's node while the LRU list gets spliced in the iteration for the folio's node. Any LRU operation on that folio in between resolves its lruvec through the objcg, and thus takes the lru_lock of the wrong memcg, not the lru_lock of the list the folio is actually on. Fix this by selecting the objcg by folio_nid() at charge time, and by re-deriving it for the destination node in mem_cgroup_migrate() and mem_cgroup_replace_folio().
Title memcg: keep folio's objcg same as its node
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-09-16T14:41:01.029Z

Reserved: 2026-09-11T19:38:34.779Z

Link: CVE-2026-89985

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-09-16T11:17:09.547

Modified: 2026-09-16T15:18:22.363

Link: CVE-2026-89985

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-18T04:00:03Z

Weaknesses
  • CWE-362

    Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')