Skip to main content

Linux Kernel EUVDEUVD-2026-48963

| CVE-2026-64419 MEDIUM
2026-07-25 Linux GHSA-h85j-5g9p-ppj5
5.5
CVSS 3.1 · NVD
Share

Severity by source

NVD PRIMARY
5.5 MEDIUM
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
vuln.today AI
4.7 MEDIUM

AC:H reflects the conjunction of zswap-enabled, active memcg hierarchy, and debugfs read access required; otherwise mirrors vendor vector.

3.1 AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H
4.0 AV:L/AC:H/AT:P/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
SUSE
1.9 LOW
AV:L/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:L
Red Hat
5.5 LOW
qualitative

Primary rating from NVD.

CVSS VectorNVD

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

Lifecycle Timeline

6
Metadata Corrected
Sep 04, 2026 - 16:40 vuln.today
tag: Information Disclosure removed
Analysis Generated
Sep 04, 2026 - 16:11 vuln.today
CVSS changed
Sep 04, 2026 - 15:37 NVD
5.5 (MEDIUM)
Patch available
Jul 25, 2026 - 11:18 EUVD
CVE Published
Jul 25, 2026 - 08:50 nvd
MEDIUM 5.5
CVE Published
Jul 25, 2026 - 08:50 cve.org
UNKNOWN (no severity yet)

DescriptionNVD

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

mm/shrinker: do not hold RCU lock in shrinker_debugfs_count_show()

Reading the debugfs "count" file of a memcg-aware shrinker can sleep inside an RCU read-side critical section:

BUG: sleeping function called from invalid context at kernel/cgroup/rstat.c:421 RCU nest depth: 1, expected: 0 css_rstat_flush mem_cgroup_flush_stats zswap_shrinker_count shrinker_debugfs_count_show

shrinker_debugfs_count_show() invokes the ->count_objects() callback under rcu_read_lock(). The zswap callback flushes memcg stats via css_rstat_flush(), which may sleep, so it must not run under RCU.

The RCU lock is not needed here. mem_cgroup_iter() takes RCU internally and returns a memcg holding a css reference (dropped on the next iteration or by mem_cgroup_iter_break()), so the memcg stays alive without it. The shrinker is kept alive by the open debugfs file: shrinker_free() removes the debugfs entries via debugfs_remove_recursive(), which waits for in-flight readers to drain, before call_rcu(..., shrinker_free_rcu_cb). The sibling "scan" handler already invokes the sleeping ->scan_objects() callback with no RCU section.

Drop the rcu_read_lock()/rcu_read_unlock().

AnalysisAI

Kernel availability loss in the Linux mm/shrinker subsystem allows a local user with debugfs access to trigger a kernel BUG by reading the debugfs 'count' file of a memcg-aware shrinker such as zswap. The shrinker_debugfs_count_show() function incorrectly holds rcu_read_lock() while invoking ->count_objects() callbacks; when zswap's callback attempts to flush memcg stats via css_rstat_flush(), it sleeps inside an RCU read-side critical section - a fatal kernel invariant violation. No public exploit has been identified at time of analysis, and EPSS is very low at 0.21% (12th percentile).

Technical ContextAI

The affected code lives in the Linux kernel's mm/shrinker subsystem (mm/shrinker.c), introduced alongside shrinker debugfs support around kernel 6.0 (commit 5035ebc644aec92d55d1bbfe042f35341e4bffb5). shrinker_debugfs_count_show() iterates registered shrinkers via mem_cgroup_iter() under rcu_read_lock(), then calls each shrinker's ->count_objects() callback. The zswap subsystem's count callback invokes css_rstat_flush() to flush per-cgroup memory statistics; this function can sleep (it acquires sleeping locks internally). Sleeping inside an RCU read-side critical section violates the core RCU invariant that no context switch may occur, causing an immediate kernel BUG. The fix is correct: mem_cgroup_iter() already manages RCU internally and returns a memcg with an elevated css reference - no external RCU lock is needed. The sibling scan handler (shrinker_debugfs_scan_write) already correctly omits RCU around ->scan_objects(). CWE is not assigned, but the class is improper locking / incorrect synchronization (CWE-667).

RemediationAI

Update the Linux kernel to a patched release: 7.1.4 or 7.2-rc1 for mainline users; 6.18.39, 6.12.96, 6.6.145, or 6.1.178 for LTS branch users. Exact fix commits can be cherry-picked via kernel.org/stable (see references). If an immediate kernel update is not feasible, two compensating controls apply with trade-offs: (1) Disable zswap (boot with 'zswap.enabled=0' or 'echo 0 > /sys/module/zswap/parameters/enabled') - this eliminates the vulnerable zswap count callback but removes compressed swap acceleration, increasing memory pressure. (2) Restrict debugfs access by mounting with restrictive permissions ('mount -o remount,mode=700 /sys/kernel/debug') or unmounting debugfs entirely - this blocks the trigger path but removes all debugfs-based kernel diagnostics for all users. Neither workaround patches the underlying locking defect; kernel update is the definitive fix.

Vendor StatusVendor

SUSE

Severity: Low
Product Status
openSUSE Tumbleweed Fixed
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected

Share

EUVD-2026-48963 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy