Skip to main content

Boteraser | Website and Server Security Solutions

🛡️ CVE-2023-54271 — kernel

⚪ Unknown ✅ No Known Exploit NVD
N/A
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

blk-cgroup: Fix NULL deref caused by blkg_policy_data being installed before init

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

blk-cgroup: Fix NULL deref caused by blkg_policy_data being installed before init

blk-iocost sometimes causes the following crash:

BUG: kernel NULL pointer dereference, address: 00000000000000e0

...

RIP: 0010:_raw_spin_lock+0x17/0x30

Code: be 01 02 00 00 e8 79 38 39 ff 31 d2 89 d0 5d c3 0f 1f 00 0f 1f 44 00 00 55 48 89 e5 65 ff 05 48 d0 34 7e b9 01 00 00 00 31 c0 <f0> 0f b1 0f 75 02 5d c3 89 c6 e8 ea 04 00 00 5d c3 0f 1f 84 00 00

RSP: 0018:ffffc900023b3d40 EFLAGS: 00010046

RAX: 0000000000000000 RBX: 00000000000000e0 RCX: 0000000000000001

RDX: ffffc900023b3d20 RSI: ffffc900023b3cf0 RDI: 00000000000000e0

RBP: ffffc900023b3d40 R08: ffffc900023b3c10 R09: 0000000000000003

R10: 0000000000000064 R11: 000000000000000a R12: ffff888102337000

R13: fffffffffffffff2 R14: ffff88810af408c8 R15: ffff8881070c3600

FS: 00007faaaf364fc0(0000) GS:ffff88842fdc0000(0000) knlGS:0000000000000000

CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033

CR2: 00000000000000e0 CR3: 00000001097b1000 CR4: 0000000000350ea0

Call Trace:

<TASK>

ioc_weight_write+0x13d/0x410

cgroup_file_write+0x7a/0x130

kernfs_fop_write_iter+0xf5/0x170

vfs_write+0x298/0x370

ksys_write+0x5f/0xb0

__x64_sys_write+0x1b/0x20

do_syscall_64+0x3d/0x80

entry_SYSCALL_64_after_hwframe+0x46/0xb0

This happens because iocg->ioc is NULL. The field is initialized by

ioc_pd_init() and never cleared. The NULL deref is caused by

blkcg_activate_policy() installing blkg_policy_data before initializing it.

blkcg_activate_policy() was doing the following:

1. Allocate pd's for all existing blkg's and install them in blkg->pd[].

2. Initialize all pd's.

3. Online all pd's.

blkcg_activate_policy() only grabs the queue_lock and may release and

re-acquire the lock as allocation may need to sleep. ioc_weight_write()

grabs blkcg->lock and iterates all its blkg's. The two can race and if

ioc_weight_write() runs during #1 or between #1 and #2, it can encounter a

pd which is not initialized yet, leading to crash.

The crash can be reproduced with the following script:

#!/bin/bash

echo +io > /sys/fs/cgroup/cgroup.subtree_control

systemd-run --unit touch-sda --scope dd if=/dev/sda of=/dev/null bs=1M count=1 iflag=direct

echo 100 > /sys/fs/cgroup/system.slice/io.weight

bash -c "echo '8:0 enable=1' > /sys/fs/cgroup/io.cost.qos" &

sleep .2

echo 100 > /sys/fs/cgroup/system.slice/io.weight

with the following patch applied:

> diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c

> index fc49be622e05..38d671d5e10c 100644

> --- a/block/blk-cgroup.c

> +++ b/block/blk-cgroup.c

> @@ -1553,6 +1553,12 @@ int blkcg_activate_policy(struct gendisk *disk, const struct blkcg_policy *pol)

> pd->online = false;

> }

>

> + if (system_state == SYSTEM_RUNNING) {

> + spin_unlock_irq(&q->queue_lock);

> + ssleep(1);

> + spin_lock_irq(&q->queue_lock);

> + }

> +

> /* all allocated, init in the same order */

> if (pol->pd_init_fn)

> list_for_each_entry_reverse(blkg, &q->blkg_list, q_node)

I don't see a reason why all pd's should be allocated, initialized and

onlined together. The only ordering requirement is that parent blkgs to be

initialized and onlined before children, which is guaranteed from the

walking order. Let's fix the bug by allocating, initializing and onlining pd

for each blkg and holding blkcg->lock over initialization and onlining. This

ensures that an installed blkg is always fully initialized and onlined

removing the the race window.

Affected software

CVE-2023-54271 is recorded against 2 packages.

  • kernel (from 6.5.0 up to 6.5.3)
  • unknown

Timeline and source

Published on 30 December 2025 and last revised on 12 August 2026. No public exploit is currently recorded for this entry. Record sourced from NVD.

References

git.kernel.org (Web)
git.kernel.org (Web)
git.kernel.org (Web)
git.kernel.org (Web)
git.kernel.org (Web)
github.com (Advisory)
nvd.nist.gov (Advisory)
git.kernel.org (Package)

Other advisories for this package

kernel has other advisories on record. If you are patching this one, these are worth checking on the same host:

Details

Severity Unknown
CVSS Score N/A
CVSS Vector N/A
CWE N/A
Public Exploit ✅ No
Source NVD
Published 2025-12-30
Updated 2026-08-20
Modified 2026-08-12
Fix URL N/A

Affected Packages

Software From version Fixed in
kernel 6.5.0 6.5.3
unknown — —

Similar Threats

Free Vulnerability Check

Is your site affected by CVE-2023-54271?

BotEraser helps you identify potentially vulnerable plugins and themes by checking your installation against CVE-2023-54271 and other known CVE records.

Scan My Site Free →

No credit card required  ·  Results in minutes

ⓘ Data Notice: The information presented above has been compiled from publicly available internet sources. Boteraser aggregates this data solely for informational purposes and does not independently classify, evaluate, or endorse any findings about the vulnerabilities listed. The accuracy and completeness of this information is the sole responsibility of the original publishers. Boteraser and its operators accept no liability for any decisions made based on this data.

Browse related advisories

All advisoriesCVECVE 2023
✓