CVE-2023-53531 in Linux
Resumen
por VulDB • 2026-05-22
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
null_blk: corrección del manejo del tiempo de espera de las solicitudes de sondeo (poll)
Al realizar benchmarks de io_uring en /dev/nullb0, es fácil provocar un bloqueo del kernel si se activan los tiempos de espera de las solicitudes de sondeo, como ha informado David. [1]
BUG: dereferencia de puntero NULL en el kernel, dirección: 0000000000000008 Workqueue: kblockd blk_mq_timeout_work RIP: 0010:null_timeout_rq+0x4e/0x91 Rastro de llamadas (Call Trace): ? null_timeout_rq+0x4e/0x91 blk_mq_handle_expired+0x31/0x4b bt_iter+0x68/0x84 ? bt_tags_iter+0x81/0x81 __sbitmap_for_each_set.constprop.0+0xb0/0xf2 ? __blk_mq_complete_request_remote+0xf/0xf bt_for_each+0x46/0x64 ? __blk_mq_complete_request_remote+0xf/0xf ? percpu_ref_get_many+0xc/0x2a blk_mq_queue_tag_busy_iter+0x14d/0x18e blk_mq_timeout_work+0x95/0x127 process_one_work+0x185/0x263 worker_thread+0x1b5/0x227
Se trata efectivamente de un problema de condición de carrera (race condition) entre null_timeout_rq() y null_poll().
null_poll() null_timeout_rq() spin_lock(&nq->poll_lock) list_splice_init(&nq->poll_list, &list) spin_unlock(&nq->poll_lock)
while (!list_empty(&list)) req = list_first_entry() list_del_init() ... blk_mq_add_to_batch() // req->rq_next = NULL spin_lock(&nq->poll_lock)
// rq->queuelist->next == NULL list_del_init(&rq->queuelist)
spin_unlock(&nq->poll_lock)
Se corrigen estos problemas estableciendo el estado de las solicitudes como MQ_RQ_COMPLETE bajo la protección de nq->poll_lock, lo que permite que null_timeout_rq() detecte de forma segura esta condición de carrera y devuelva el control anticipadamente.
Tenga en cuenta que este parche solo corrige el bloqueo del kernel (kernel panic) cuando ocurre un tiempo de espera de la solicitud.
[1] https://lore.kernel.org/all/[email protected]/
If you want to get best quality of vulnerability data, you may have to visit VulDB.