Cyber Actualité
Alertes

Vulnérabilités citées

CVE-2023-54271

Score non publié

Faits confirmés

Données publiées par NVD. La traduction française est automatique : le texte anglais fait foi.

Dans le noyau Linux, la vulnérabilité suivante a été résolue: blk-cgroup: Fix NULL deef du fait de blkg_policy_data installé avant init blk-iocost cause parfois l'écrasement suivant: BUG: noyau NULL pointer de référence, adresse: 00000000000000000e0... RIP: 0010:_raw_spin_lock+0x17/0x30 Code: be 01 02 00 00 00 e8 79 38 39 ff 31 d2 89 d0 5d c3 0f 1f 00f 1f 1f 44 00 00 55 48 89 e5 65 ff 05 48 d0 34 7e b9 01 00 00 00 31 c0 <f0ffffffff1 0f 75 02 5d c3 89 c6 e8 ea 04 00 5d c3 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff Le deef NULL est causé par

Texte officiel (anglais)

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.

Versions touchées

Pas encore publiées par NVD. Consultez l’avis de l’éditeur.

Correctif et avis officiels

Statut NVD : Deferred

Notre analyse automatique : en termes simples

Explication générée à partir des données officielles, sans test de notre part. Elle peut simplifier ou se tromper.

Pas encore publiées par NVD. Consultez l’avis de l’éditeur.

Mini glossaire

CVE
Numéro public unique attribué à une faille, pour que tout le monde parle de la même chose.
CVSS
Note de gravité de 0 à 10. Elle mesure la gravité théorique, pas le risque réel chez vous.
CWE
Catégorie du type d’erreur à l’origine de la faille.
KEV
Liste de l’agence américaine CISA recensant les failles réellement exploitées par des attaquants.
Correctif
Mise à jour publiée par l’éditeur pour supprimer la faille.
Atténuation
Mesure temporaire qui réduit le risque quand le correctif n’est pas encore appliqué.

Articles liés

Siemens SIMATIQUE S7-1500 TM MFP

Voir le résumé de CSAF Plusieurs vulnérabilités ont été identifiées dans le sous-système GNU/Linux supplémentaire du SIMATIC S7-1500 TM MFP V1.1.1. Siemens prépare des correctifs et recommande des mesures d'atténuation spécifiques pour les produits où des correctifs ne sont pas ou pas encore disponibles. Les versions suivantes de Siemens SIMATIC S7-1500 TM MFP sont touchées : SIMATIC S7-1500 TM MFP - GNU/Linux sous-système vers:all/* CVSS Vendeur Equ

CISA Advisories

This product uses data from the NVD API but is not endorsed or certified by the NVD.