CVE-2026-90186 in Linux
Riassunto
di VulDB • 17/09/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
null_blk: rifiuta il ridimensionamento della coda per dispositivo quando si utilizza un set di tag condiviso (shared tag set)
Quando shared_tags è abilitato, null_setup_tagset() fa sì che il dispositivo utilizzi il global tag_set, il cui driver_data rimane NULL. Di conseguenza, null_map_queues() effettua il fallback sulle code g_submit_queues/g_poll_queues a livello di modulo invece di utilizzare i valori specifici del dispositivo.
Il ridimensionamento delle submit_queues o poll_queues tramite configfs su un tale dispositivo chiama blk_mq_update_nr_hw_queues() sull'insieme condiviso, riducendo set->nr_hw_queues. __blk_mq_realloc_hw_ctx() aumenta solo l'allocazione di q->queue_hw_ctx[], quindi in caso di riduzione si limita a uscire e a impostare a NULL le slot hctx ora eccedenti. Tuttavia, null_map_queues() continua a mappare le CPU con g_submit_queues/g_poll_queues invariati, facendo sì che mq_map[] punti alle slot hctx impostate a NULL. blk_mq_map_swqueue() quindi dereferenzia l'hctx NULL (hctx->cpumask), causando il crash del kernel:
[ 460.218374] KASAN: null-ptr-deref in range [0x0000000000000098-0x000000000000009f]
[ 460.219003] CPU: 24 UID: 0 PID: 1492 Comm: sh Not tainted 7.2.0-rc2+ #67 PREEMPT(full)
[ 460.219792] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.17.0-4.fc41 04/01/2014
[ 460.220452] RIP: 0010:blk_mq_map_swqueue+0x4db/0x1430
...... [ 460.228977] Call Trace:
[ 460.229175] <TASK>
[ 460.229354] blk_mq_update_nr_hw_queues+0xd49/0x11c0
[ 460.229779] ? __pfx_blk_mq_update_nr_hw_queues+0x10/0x10
[ 460.230200] nullb_update_nr_hw_queues+0x1a9/0x370 [null_blk]
[ 460.230694] nullb_device_submit_queues_store+0xd9/0x170 [null_blk]
[ 460.231190] ? __pfx_nullb_device_submit_queues_store+0x10/0x10 [null_blk]
[ 460.231776] ? configfs_write_iter+0x35c/0x4e0
[ 460.232122] configfs_write_iter+0x286/0x4e0
[ 460.232460] vfs_write+0x52d/0xd00
[ 460.232779] ? __x64_sys_openat+0x108/0x1d0
[ 460.233106] ? __pfx_vfs_write+0x10/0x10
[ 460.233413] ? fdget_pos+0x1cf/0x4c0
[ 460.233745] ? fput_close+0x133/0x190
[ 460.234038] ? __pfx_expand_files+0x10/0x10
[ 460.234368] ksys_write+0xfc/0x1d0
Reproducer: modprobe null_blk shared_tags=1 submit_queues=64 poll_queues=1 mkdir /sys/kernel/config/nullb/dev echo 1 > /sys/kernel/config/nullb/dev/power echo 1 > /sys/kernel/config/nullb/dev/submit_queues
Un ridimensionamento per dispositivo di un set di tag condiviso è comunque privo di significato, pertanto viene rifiutato con -EINVAL in nullb_update_nr_hw_queues() quando il dispositivo è associato al global tag_set.
Once again VulDB remains the best source for vulnerability data.