Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1359 CNY

100%

CVE-2026-98414— memcg: avoid charging the root memcg from obj_cgroup_charge_pages()

Quick assessment

Affected
Linux Linux
Exploitation
No confirmed in-the-wild exploitation; assess based on exposure
Recommended action
Check the vendor advisory and references for a fixed version. If immediate upgrade is impossible, restrict exposure and increase monitoring.

在 Linux 内核中,已解决以下漏洞: memcg:避免从 对根 memcg 进行记账 将 objcg(对象组)解析为其对应的 memcg(内存控制组),并调用 ,该函数不会短路处理根 memcg。这个被解析出的 memcg 可能是根 memcg: 反映的是创建 objcg 时所针对的 memcg,且永远不会更新;而 会在删除目录(rmdir)时将 重定向到其父级。因此,一个即将死亡的根子级 cgroup 的 objcg 虽然能通过所有的 过滤检查,但在解析后会指向根 memcg。 Folios 保留其最初被记账

AI Predicted 4.3 Difficulty: Moderate EPSS 0.21% · P10

Affected Version Matrix 8

VendorProduct Version RangeStatus
Linux Linux 20d6c17252282c3af261d1cde8e34def1b2458c8< d5cdff14c385bf42d03c0dd4c3e88ddf4c28b8a9 affected
20d6c17252282c3af261d1cde8e34def1b2458c8< ecc03877b1b05cb1e3a72175ccb868383eccc518 affected
20d6c17252282c3af261d1cde8e34def1b2458c8< 6e673d0879ef78c395cfe0d3ba316690a60055d8 affected
6.15 affected
< 6.15 unaffected
6.18.54≤ 6.18.* unaffected
7.2.8≤ 7.2.* unaffected
7.3-rc4≤ * unaffected
Get alerts for future matching vulnerabilities Log in to subscribe

I. Basic Information for CVE-2026-98414

Vulnerability Information

Have questions about the vulnerability? See if Shenlong's analysis helps!
View Shenlong Deep Dive ↗

Although we use advanced large model technology, its output may still contain inaccurate or outdated information.Shenlong tries to ensure data accuracy, but please verify and judge based on the actual situation.

Vulnerability Title
memcg: avoid charging the root memcg from obj_cgroup_charge_pages()
Source: CVE Program / CVE List V5
Vulnerability Description
In the Linux kernel, the following vulnerability has been resolved: memcg: avoid charging the root memcg from obj_cgroup_charge_pages() obj_cgroup_charge_pages() resolves the objcg to its memcg and calls try_charge_memcg(), which does not short circuit the root memcg. That memcg can be the root memcg: obj_cgroup_is_root() reflects the memcg the objcg was created for and is never updated, while memcg_reparent_objcgs() does redirect objcg->memcg to the parent on rmdir. An objcg of a dying child of root therefore passes every obj_cgroup_is_root() filter but resolves to the root memcg. Folios keep the objcg they were charged with, so this is easy to reach through zswap: allocate anon memory in a cgroup, move the task out, remove the cgroup, then write to the root cgroup's memory.reclaim. The reclaimed folios are charged through the reparented objcg and end up in refill_stock() with the root memcg: WARNING: mm/memcontrol.c:2198 at refill_stock+0x644/0x940 refill_stock+0x644/0x940 try_charge_memcg+0x12d6/0x1570 __obj_cgroup_charge+0x35/0xf0 obj_cgroup_charge+0x1de/0x210 obj_cgroup_charge_zswap+0x83/0x270 zswap_store+0x1620/0x2000 swap_writeout+0x94c/0x14c0 shrink_folio_list+0x3388/0x52b0 [...] try_to_free_mem_cgroup_pages+0x30d/0x830 user_proactive_reclaim+0x504/0x840 memory_reclaim+0x1f/0x30 Beyond the warning, the charge is asymmetric: obj_cgroup_uncharge_pages() skips refill_stock() for the root memcg, so the root's page counter grows and is never uncharged. It is not user visible, since memory.current is not exposed on the root, but it is a leak. Use try_charge(), which returns early for the root memcg, restoring the symmetry with obj_cgroup_uncharge_pages(). The above sequence was scripted into a standalone reproducer (zswap on, swap on a virtio disk, 512MB of anon memory faulted in inside a child of the root cgroup, the task then migrated to the root cgroup, the child removed, followed by "echo 600M swappiness=max > memory.reclaim" on the root) and run in a CONFIG_DEBUG_VM=y VM. It reproduces the splat on the first zswap store of a reparented folio, with the same call chain as the report. With this patch applied the splat is gone while the zswap store count over the run is unchanged, so the same path is still exercised. cgroup selftests test_zswap, test_kmem and test_memcontrol show no new failures.
Source: CVE Program / CVE List V5
CVSS Information
N/A
Source: CVE Program / CVE List V5
Vulnerability Type
N/A
Source: CVE Program / CVE List V5

Affected Products

Vendor Product Affected Versions CPE Subscribe
Linux Linux 20d6c17252282c3af261d1cde8e34def1b2458c8 ~ d5cdff14c385bf42d03c0dd4c3e88ddf4c28b8a9 -
Linux Linux 6.15 -

II. Public POCs for CVE-2026-98414

# POC Description Source Link Shenlong Link
AI-Generated POC Premium

No public POC found.

Login to generate AI POC

III. Intelligence Information for CVE-2026-98414

请登录查看更多情报信息。

Other References for CVE-2026-98414 (3)

Same Patch Batch · Linux · 2026-10-14 · 46 CVEs total

CVE-2026-98398 locking/lockdep: Invalidate stale class_cache entries for zapped classes
CVE-2026-98396 powerpc: Do not restore KUAP in arch_exit_to_user_mode_prepare()
CVE-2026-98393 net: ipv4: Fix UDP length overflow with PMTU discover and big MTU
CVE-2026-98391 drm/xe: Guard page-fault worker with runtime PM check
CVE-2026-98389 drm/amdgpu: skip gfx switch_power_profile during GPU reset
CVE-2026-98388 exec: do_close_on_exec() before taking exec_update_lock
CVE-2026-98387 s390/crypto: Fix skcipher_walk return code handling in aes_s390
CVE-2026-98386 scsi: qla2xxx: Use memset_io() to clear QLAFX00 request ring slot
CVE-2026-98390 x86/amd_node: Avoid divide by zero on virtualized systems
CVE-2026-98397 platform/x86: x86-android-tablets: hold device reference for secondary fwnode teardown
CVE-2026-98395 powerpc/entry: Fix irq_soft_mask corruption on replayed interrupt exit
CVE-2026-98399 s390/ipl: Fix NULL deref in dump_reipl without re-IPL parm block
CVE-2026-98400 s390/ipl: Fix NULL deref in kdump without re-IPL parm block
CVE-2026-98402 net: icmp: avoid invalid transport header access in icmp_send tracepoint
CVE-2026-98401 net: iptunnel: fix stale transport header during tunnel decapsulation
CVE-2026-98403 s390/boot: Avoid IPL parameter append past command line
CVE-2026-98404 drm/virtio: Fix a NULL vs ERR_PTR() bug in virtio_gpu_user_framebuffer_create()
CVE-2026-98405 smb: client: fix missing iov bounds check in parse_posix_sids()
CVE-2026-98406 wifi: mac80211: avoid WARN in set_bitrate_mask when sdata not in driver
CVE-2026-98408 watchdog: rzv2h: Avoid division by zero

Showing top 20 of 46 CVEs. View all on vendor page &rarr; →

IV. Related Vulnerabilities

V. Comments for CVE-2026-98414

No comments yet


Leave a comment