CVE-2023-54271 in Linux
Résumé
par VulDB • 25/05/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
blk-cgroup : Correction de la déréférencement NULL causé par l'installation de blkg_policy_data avant l'initialisation
blk-iocost provoque parfois le plantage suivant :
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 48 c1 e2 20 03 d0 5b 5d c3 0f 1f 40 00 48 8b 05 6c 38 39 ff 48 85 c0 74 08 48 8b 00 <f0> 80 0c 05 be 01 02 00 00 75 f1 c3 0f 1f 40 00 48 8b 05 61 38 39 RSP: 0018:ffffc90000097d38 EFLAGS: 00010246 RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000 RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff8881097b1000 RBP: ffffc90000097d68 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000 R13: ffff8881097b1000 R14: ffff8881097b1000 R15: ffff8881097b1000 FS: 00007f0000000700(0000) GS:ffff888109700000(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
Cela se produit parce que iocg->ioc est NULL. Le champ est initialisé par ioc_pd_init() et jamais effacé. La déréférencement NULL est causé par blkcg_activate_policy() installant blkg_policy_data avant de l'initialiser.
blkcg_activate_policy() faisait ce qui suit :
1. Allouer les pd pour tous les blkg existants et les installer dans blkg->pd[].
2. Initialiser tous les pd. 3. Mettre en ligne tous les pd.
blkcg_activate_policy() ne prend que queue_lock et peut libérer et reprendre le lock car l'allocation peut nécessiter de dormir. ioc_weight_write() prend blkcg->lock et itère tous ses blkg. Les deux peuvent entrer en concurrence et si ioc_weight_write() s'exécute pendant #1 ou entre #1 et #2, il peut rencontrer un pd qui n'est pas encore initialisé, ce qui entraîne un plantage.
Le plantage peut être reproduit
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.