Linux Kernel
CVE-2024-38384
HIGH
Severity by source
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Race condition demands precise concurrent I/O timing (AC:H); local low-privilege access required (AV:L/PR:L); kernel list corruption enables full system impact.
Primary rating from Vendor (416baaa9-dc9f-4396-8d5f-8c081fb06d67).
CVSS VectorVendor: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
Lifecycle Timeline
5DescriptionCVE.org
In the Linux kernel, the following vulnerability has been resolved:
blk-cgroup: fix list corruption from reorder of WRITE ->lqueued
__blkcg_rstat_flush() can be run anytime, especially when blk_cgroup_bio_start is being executed.
If WRITE of ->lqueued is re-ordered with READ of 'bisc->lnode.next' in the loop of __blkcg_rstat_flush(), next_bisc can be assigned with one stat instance being added in blk_cgroup_bio_start(), then the local list in __blkcg_rstat_flush() could be corrupted.
Fix the issue by adding one barrier.
AnalysisAI
Memory ordering race condition in the Linux kernel's blk-cgroup I/O accounting subsystem allows a local low-privileged user to corrupt kernel linked-list structures, potentially causing a system crash or kernel memory corruption. The flaw arises when CPU instruction reordering causes __blkcg_rstat_flush() to read a stale or partially-initialized next_bisc pointer while blk_cgroup_bio_start() concurrently modifies the statistics list, resolved only by inserting a memory barrier. With a CVSS 7.8 score (AV:L/AC:L/PR:L) but a low EPSS of 0.24% at the 15th percentile, this is a genuine kernel integrity issue with no confirmed active exploitation and no known public proof-of-concept at time of analysis.
Technical ContextAI
The blk-cgroup subsystem implements per-cgroup block I/O accounting in the Linux kernel, tracking per-CPU statistics via linked lists of blkcg_iostat_cpu instances. The vulnerability is a classic memory ordering hazard: without a compiler and CPU memory barrier between the WRITE to ->lqueued in blk_cgroup_bio_start() and the READ of bisc->lnode.next in the flush loop of __blkcg_rstat_flush(), modern out-of-order CPUs (particularly on architectures with relaxed memory models like x86 with store-load reordering or ARM) can expose the flush routine to an incompletely-published list entry, assigning next_bisc a pointer to a structure still being initialized. The root cause is a synchronization omission (CWE-400 is assigned, though CWE-362 - Race Condition - more precisely describes the flaw class). The fix is a single barrier instruction. Three stable-tree commits were issued (714e59b5, 785298ab, d0aac236), implying the fix was backported across at least three active stable kernel series. Affected products span all Linux kernel versions in the CPE range cpe:2.3:o:linux:linux_kernel:*.
RemediationAI
Apply the upstream kernel patches available via the Linux stable git tree: commits 714e59b5456e4d6e4295a9968c564abe193f461c, 785298ab6b802afa75089239266b6bbea590809c, and d0aac2363549e12cc79b8e285f13d5a9f42fd08e (https://git.kernel.org/stable/). Users should update to the distribution-provided kernel package that incorporates these fixes; consult your vendor's security errata (Red Hat RHSA, Ubuntu USN, Debian DSA, SUSE SUSE-SU) for the specific patched kernel version for your distribution. Exact patched version numbers are not independently confirmed from the available input data beyond the upstream stable commits. As a compensating control pending patching, disabling cgroup v2 block I/O controllers (removing io.weight or io.max configuration from cgroup slices) would eliminate the vulnerable code path, at the trade-off of losing per-cgroup I/O throttling for containers or workloads. Restricting local user access on multi-tenant systems reduces exposure given the AV:L/PR:L exploitation requirement.
Same weakness CWE-400 – Uncontrolled Resource Consumption
View allSame technique Denial Of Service
View allShare
External POC / Exploit Code
Leaving vuln.today