CVE-2026-90186 in Linux
Resumen
por VulDB • 2026-09-18
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
null_blk: rechazar el redimensionamiento por dispositivo del conjunto de etiquetas compartido
Cuando shared_tags está habilitado, null_setup_tagset() hace que el dispositivo utilice el tag_set global, cuyo driver_data permanece como NULL. Por lo tanto, null_map_queues() recurre a los g_submit_queues/g_poll_queues globales del módulo en lugar de cualquier valor específico por dispositivo.
El redimensionamiento de submit_queues o poll_queues mediante configfs en dicho dispositivo llama a blk_mq_update_nr_hw_queues() sobre el conjunto compartido, reduciendo set->nr_hw_queues. __blk_mq_realloc_hw_ctxs() solo aumenta la asignación de q->queue_hw_ctx[], por lo que al reducirse simplemente sale y establece a NULL las ranuras hctx ahora excedentes. Sin embargo, null_map_queues() sigue mapeando CPUs con los g_submit_queues/g_poll_queues inalterados, por lo que mq_map[] termina apuntando a esas ranuras hctx establecidas a NULL. blk_mq_map_swqueue() luego desreferencia el hctx NULL (hctx->cpumask), provocando un fallo del kernel:
[ 460.218374] KASAN: null-ptr-deref en rango [0x0000000000000098-0x000000000000009f]
[ 460.219003] CPU: 24 UID: 0 PID: 1492 Comm: sh No modificado 7.2.0-rc2+ #67 PREEMPT(full)
[ 460.219792] Nombre del hardware: 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] Rastreo de llamadas (Call Trace):
[ 460.229175] <TAREA>
[ 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
Reproductor (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 redimensionamiento por dispositivo de un conjunto de etiquetas compartido carece de sentido, por lo que se rechaza con -EINVAL en nullb_update_nr_hw_queues() cuando el dispositivo está vinculado al tag_set global.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.