CVE-2023-54271
Linux Kernel vulnerability analysis and mitigation

Overview

CVE-2023-54271 is a race condition vulnerability in the Linux kernel's block I/O cgroup (blk-cgroup) subsystem that causes a NULL pointer dereference in the blk-iocost component. The flaw exists in blkcg_activate_policy(), which allocates, initializes, and onlines policy data in separate phases without adequate locking, allowing a concurrent ioc_weight_write() call to encounter uninitialized policy data. It was publicly disclosed on December 30, 2025, and affects the Linux kernel across multiple stable branches. The vulnerability carries a CVSS v3.1 base score of 7.0 (High) (Red Hat CVE, Red Hat Bugzilla).

Technical details

The root cause is a race condition (CWE-362) in blkcg_activate_policy(), which performs three sequential operations — allocating blkg_policy_data (pd) for all existing block groups (blkg), initializing them, and onlining them — without holding blkcg->lock across all phases. Because blkcg_activate_policy() only holds queue_lock (and may release it during allocation), a concurrent ioc_weight_write() call that holds blkcg->lock and iterates all blkgs can encounter a pd that has been installed (step 1) but not yet initialized (step 2), resulting in iocg->ioc being NULL. The crash manifests as a kernel NULL pointer dereference at address 0xe0 inside _raw_spin_lock, triggered when the uninitialized field is accessed. The fix reorganizes blkcg_activate_policy() to allocate, initialize, and online each blkg's pd individually while holding blkcg->lock over initialization and onlining, eliminating the race window (Red Hat Bugzilla).

Impact

Successful exploitation causes a kernel NULL pointer dereference (BUG), crashing the system and resulting in a Denial of Service. The crash occurs in the _raw_spin_lock function when accessing uninitialized memory at offset 0xe0, leading to system instability and service disruption. While the CVSS score reflects high confidentiality, integrity, and availability impact (consistent with kernel-level crashes), the primary observed consequence is availability loss; no data exfiltration or privilege escalation has been demonstrated in practice (Red Hat CVE, Red Hat Bugzilla).

Exploitation steps

  1. Precondition: Obtain a local account with low privileges on a Linux system using cgroup v2 with blk-iocost enabled.
  2. Enable cgroup I/O control: Write to /sys/fs/cgroup/cgroup.subtree_control to enable the io controller (e.g., echo +io > /sys/fs/cgroup/cgroup.subtree_control).
  3. Trigger blk-iocost policy activation: Concurrently write to the io.cost.qos cgroup file to activate the blk-iocost policy (e.g., echo '8:0 enable=1' > /sys/fs/cgroup/io.cost.qos &), which calls blkcg_activate_policy() and begins allocating uninitialized blkg_policy_data structures.
  4. Race with ioc_weight_write: Simultaneously write to an io.weight cgroup file (e.g., echo 100 > /sys/fs/cgroup/system.slice/io.weight), triggering ioc_weight_write() which iterates blkgs and accesses the partially-initialized pd.
  5. Trigger NULL dereference: If the race is won, ioc_weight_write() accesses iocg->ioc while it is still NULL, causing a kernel NULL pointer dereference crash (BUG) and system reboot/panic (Red Hat Bugzilla).

Indicators of compromise

  • Logs: Kernel crash logs containing BUG: kernel NULL pointer dereference, address: 00000000000000e0 with a call trace including ioc_weight_write, cgroup_file_write, kernfs_fop_write_iter, and _raw_spin_lock.
  • Logs: System journal or /var/log/kern.log entries showing CR2: 00000000000000e0 and RIP: 0010:_raw_spin_lock+0x17/0x30 at the time of crash.
  • Process: Concurrent writes to /sys/fs/cgroup/io.cost.qos and /sys/fs/cgroup/*/io.weight from low-privileged processes in close temporal proximity.
  • System: Unexpected kernel panics or system reboots on hosts using cgroup v2 with blk-iocost I/O QoS policies enabled (Red Hat Bugzilla).

Mitigation and workarounds

Apply the upstream Linux kernel patch that reorganizes blkcg_activate_policy() to allocate, initialize, and online each blkg's policy data individually while holding blkcg->lock, eliminating the race window. Patches are available in multiple stable kernel branches via the upstream kernel git repository. As a temporary workaround, restrict write access to cgroup I/O weight (io.weight) and QoS (io.cost.qos) configuration files to trusted administrators only, reducing the likelihood of triggering the race. Systems not using cgroup-based I/O resource management with the blk-iocost policy are not at risk (Red Hat CVE, Red Hat Bugzilla).

Additional resources


SourceThis report was generated using AI

Related Linux Kernel vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-64557NONEN/A
  • Linux Kernel logoLinux Kernel
  • kernel-rt-selftests-internal
NoNoJul 29, 2026
CVE-2026-64556NONEN/A
  • Linux Kernel logoLinux Kernel
  • kernel-64k-devel
NoNoJul 29, 2026
CVE-2026-64555NONEN/A
  • Linux Kernel logoLinux Kernel
  • linux-azure-fde-6.14
NoNoJul 27, 2026
CVE-2026-64554NONEN/A
  • Linux Kernel logoLinux Kernel
  • linux-gcp-6.14
NoYesJul 27, 2026
CVE-2026-64553NONEN/A
  • Linux Kernel logoLinux Kernel
  • kernel-rt-64k-debug-modules-internal
NoYesJul 27, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management