Vulnerability Details CVE-2023-53531
In the Linux kernel, the following vulnerability has been resolved:
null_blk: fix poll request timeout handling
When doing io_uring benchmark on /dev/nullb0, it's easy to crash the
kernel if poll requests timeout triggered, as reported by David. [1]
BUG: kernel NULL pointer dereference, address: 0000000000000008
Workqueue: kblockd blk_mq_timeout_work
RIP: 0010:null_timeout_rq+0x4e/0x91
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
This is indeed a race problem between null_timeout_rq() and 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)
Fix these problems by setting requests state to MQ_RQ_COMPLETE under
nq->poll_lock protection, in which null_timeout_rq() can safely detect
this race and early return.
Note this patch just fix the kernel panic when request timeout happen.
[1] https://lore.kernel.org/all/3893581.1691785261@warthog.procyon.org.uk/
Exploit prediction scoring system (EPSS) score
EPSS Score 0.0
EPSS Ranking 5.7%
CVSS Severity
CVSS v3 Score 5.5
Products affected by CVE-2023-53531
-
cpe:2.3:o:linux:linux_kernel:5.16
-
cpe:2.3:o:linux:linux_kernel:5.16.0
-
cpe:2.3:o:linux:linux_kernel:5.16.1
-
cpe:2.3:o:linux:linux_kernel:5.16.10
-
cpe:2.3:o:linux:linux_kernel:5.16.11
-
cpe:2.3:o:linux:linux_kernel:5.16.12
-
cpe:2.3:o:linux:linux_kernel:5.16.13
-
cpe:2.3:o:linux:linux_kernel:5.16.14
-
cpe:2.3:o:linux:linux_kernel:5.16.15
-
cpe:2.3:o:linux:linux_kernel:5.16.16
-
cpe:2.3:o:linux:linux_kernel:5.16.17
-
cpe:2.3:o:linux:linux_kernel:5.16.18
-
cpe:2.3:o:linux:linux_kernel:5.16.19
-
cpe:2.3:o:linux:linux_kernel:5.16.2
-
cpe:2.3:o:linux:linux_kernel:5.16.20
-
cpe:2.3:o:linux:linux_kernel:5.16.3
-
cpe:2.3:o:linux:linux_kernel:5.16.4
-
cpe:2.3:o:linux:linux_kernel:5.16.5
-
cpe:2.3:o:linux:linux_kernel:5.16.6
-
cpe:2.3:o:linux:linux_kernel:5.16.62
-
cpe:2.3:o:linux:linux_kernel:5.16.7
-
cpe:2.3:o:linux:linux_kernel:5.16.8
-
cpe:2.3:o:linux:linux_kernel:5.16.9
-
cpe:2.3:o:linux:linux_kernel:5.17
-
cpe:2.3:o:linux:linux_kernel:5.17.1
-
cpe:2.3:o:linux:linux_kernel:5.17.10
-
cpe:2.3:o:linux:linux_kernel:5.17.11
-
cpe:2.3:o:linux:linux_kernel:5.17.12
-
cpe:2.3:o:linux:linux_kernel:5.17.13
-
cpe:2.3:o:linux:linux_kernel:5.17.14
-
cpe:2.3:o:linux:linux_kernel:5.17.15
-
cpe:2.3:o:linux:linux_kernel:5.17.2
-
cpe:2.3:o:linux:linux_kernel:5.17.3
-
cpe:2.3:o:linux:linux_kernel:5.17.4
-
cpe:2.3:o:linux:linux_kernel:5.17.5
-
cpe:2.3:o:linux:linux_kernel:5.17.6
-
cpe:2.3:o:linux:linux_kernel:5.17.7
-
cpe:2.3:o:linux:linux_kernel:5.17.8
-
cpe:2.3:o:linux:linux_kernel:5.17.9
-
cpe:2.3:o:linux:linux_kernel:5.18
-
cpe:2.3:o:linux:linux_kernel:5.18.1
-
cpe:2.3:o:linux:linux_kernel:5.18.10
-
cpe:2.3:o:linux:linux_kernel:5.18.11
-
cpe:2.3:o:linux:linux_kernel:5.18.12
-
cpe:2.3:o:linux:linux_kernel:5.18.13
-
cpe:2.3:o:linux:linux_kernel:5.18.14
-
cpe:2.3:o:linux:linux_kernel:5.18.15
-
cpe:2.3:o:linux:linux_kernel:5.18.16
-
cpe:2.3:o:linux:linux_kernel:5.18.17
-
cpe:2.3:o:linux:linux_kernel:5.18.18
-
cpe:2.3:o:linux:linux_kernel:5.18.19
-
cpe:2.3:o:linux:linux_kernel:5.18.2
-
cpe:2.3:o:linux:linux_kernel:5.18.3
-
cpe:2.3:o:linux:linux_kernel:5.18.4
-
cpe:2.3:o:linux:linux_kernel:5.18.5
-
cpe:2.3:o:linux:linux_kernel:5.18.6
-
cpe:2.3:o:linux:linux_kernel:5.18.7
-
cpe:2.3:o:linux:linux_kernel:5.18.8
-
cpe:2.3:o:linux:linux_kernel:5.18.9
-
cpe:2.3:o:linux:linux_kernel:5.19
-
cpe:2.3:o:linux:linux_kernel:5.19.1
-
cpe:2.3:o:linux:linux_kernel:5.19.10
-
cpe:2.3:o:linux:linux_kernel:5.19.11
-
cpe:2.3:o:linux:linux_kernel:5.19.12
-
cpe:2.3:o:linux:linux_kernel:5.19.13
-
cpe:2.3:o:linux:linux_kernel:5.19.14
-
cpe:2.3:o:linux:linux_kernel:5.19.15
-
cpe:2.3:o:linux:linux_kernel:5.19.16
-
cpe:2.3:o:linux:linux_kernel:5.19.17
-
cpe:2.3:o:linux:linux_kernel:5.19.2
-
cpe:2.3:o:linux:linux_kernel:5.19.3
-
cpe:2.3:o:linux:linux_kernel:5.19.4
-
cpe:2.3:o:linux:linux_kernel:5.19.5
-
cpe:2.3:o:linux:linux_kernel:5.19.6
-
cpe:2.3:o:linux:linux_kernel:5.19.7
-
cpe:2.3:o:linux:linux_kernel:5.19.8
-
cpe:2.3:o:linux:linux_kernel:5.19.9
-
cpe:2.3:o:linux:linux_kernel:6.0
-
cpe:2.3:o:linux:linux_kernel:6.0.1
-
cpe:2.3:o:linux:linux_kernel:6.0.10
-
cpe:2.3:o:linux:linux_kernel:6.0.11
-
cpe:2.3:o:linux:linux_kernel:6.0.12
-
cpe:2.3:o:linux:linux_kernel:6.0.13
-
cpe:2.3:o:linux:linux_kernel:6.0.14
-
cpe:2.3:o:linux:linux_kernel:6.0.15
-
cpe:2.3:o:linux:linux_kernel:6.0.16
-
cpe:2.3:o:linux:linux_kernel:6.0.17
-
cpe:2.3:o:linux:linux_kernel:6.0.18
-
cpe:2.3:o:linux:linux_kernel:6.0.19
-
cpe:2.3:o:linux:linux_kernel:6.0.2
-
cpe:2.3:o:linux:linux_kernel:6.0.3
-
cpe:2.3:o:linux:linux_kernel:6.0.4
-
cpe:2.3:o:linux:linux_kernel:6.0.5
-
cpe:2.3:o:linux:linux_kernel:6.0.6
-
cpe:2.3:o:linux:linux_kernel:6.0.7
-
cpe:2.3:o:linux:linux_kernel:6.0.8
-
cpe:2.3:o:linux:linux_kernel:6.0.9
-
cpe:2.3:o:linux:linux_kernel:6.1
-
cpe:2.3:o:linux:linux_kernel:6.1.1
-
cpe:2.3:o:linux:linux_kernel:6.1.10
-
cpe:2.3:o:linux:linux_kernel:6.1.11
-
cpe:2.3:o:linux:linux_kernel:6.1.12
-
cpe:2.3:o:linux:linux_kernel:6.1.13
-
cpe:2.3:o:linux:linux_kernel:6.1.14
-
cpe:2.3:o:linux:linux_kernel:6.1.15
-
cpe:2.3:o:linux:linux_kernel:6.1.16
-
cpe:2.3:o:linux:linux_kernel:6.1.17
-
cpe:2.3:o:linux:linux_kernel:6.1.18
-
cpe:2.3:o:linux:linux_kernel:6.1.19
-
cpe:2.3:o:linux:linux_kernel:6.1.2
-
cpe:2.3:o:linux:linux_kernel:6.1.20
-
cpe:2.3:o:linux:linux_kernel:6.1.21
-
cpe:2.3:o:linux:linux_kernel:6.1.22
-
cpe:2.3:o:linux:linux_kernel:6.1.23
-
cpe:2.3:o:linux:linux_kernel:6.1.24
-
cpe:2.3:o:linux:linux_kernel:6.1.25
-
cpe:2.3:o:linux:linux_kernel:6.1.26
-
cpe:2.3:o:linux:linux_kernel:6.1.27
-
cpe:2.3:o:linux:linux_kernel:6.1.28
-
cpe:2.3:o:linux:linux_kernel:6.1.29
-
cpe:2.3:o:linux:linux_kernel:6.1.3
-
cpe:2.3:o:linux:linux_kernel:6.1.30
-
cpe:2.3:o:linux:linux_kernel:6.1.31
-
cpe:2.3:o:linux:linux_kernel:6.1.32
-
cpe:2.3:o:linux:linux_kernel:6.1.33
-
cpe:2.3:o:linux:linux_kernel:6.1.34
-
cpe:2.3:o:linux:linux_kernel:6.1.35
-
cpe:2.3:o:linux:linux_kernel:6.1.36
-
cpe:2.3:o:linux:linux_kernel:6.1.37
-
cpe:2.3:o:linux:linux_kernel:6.1.38
-
cpe:2.3:o:linux:linux_kernel:6.1.39
-
cpe:2.3:o:linux:linux_kernel:6.1.4
-
cpe:2.3:o:linux:linux_kernel:6.1.40
-
cpe:2.3:o:linux:linux_kernel:6.1.41
-
cpe:2.3:o:linux:linux_kernel:6.1.42
-
cpe:2.3:o:linux:linux_kernel:6.1.43
-
cpe:2.3:o:linux:linux_kernel:6.1.44
-
cpe:2.3:o:linux:linux_kernel:6.1.45
-
cpe:2.3:o:linux:linux_kernel:6.1.46
-
cpe:2.3:o:linux:linux_kernel:6.1.47
-
cpe:2.3:o:linux:linux_kernel:6.1.48
-
cpe:2.3:o:linux:linux_kernel:6.1.49
-
cpe:2.3:o:linux:linux_kernel:6.1.5
-
cpe:2.3:o:linux:linux_kernel:6.1.50
-
cpe:2.3:o:linux:linux_kernel:6.1.51
-
cpe:2.3:o:linux:linux_kernel:6.1.52
-
cpe:2.3:o:linux:linux_kernel:6.1.53
-
cpe:2.3:o:linux:linux_kernel:6.1.6
-
cpe:2.3:o:linux:linux_kernel:6.1.7
-
cpe:2.3:o:linux:linux_kernel:6.1.8
-
cpe:2.3:o:linux:linux_kernel:6.1.9
-
cpe:2.3:o:linux:linux_kernel:6.2
-
cpe:2.3:o:linux:linux_kernel:6.2.0
-
cpe:2.3:o:linux:linux_kernel:6.2.1
-
cpe:2.3:o:linux:linux_kernel:6.2.10
-
cpe:2.3:o:linux:linux_kernel:6.2.11
-
cpe:2.3:o:linux:linux_kernel:6.2.12
-
cpe:2.3:o:linux:linux_kernel:6.2.13
-
cpe:2.3:o:linux:linux_kernel:6.2.14
-
cpe:2.3:o:linux:linux_kernel:6.2.15
-
cpe:2.3:o:linux:linux_kernel:6.2.16
-
cpe:2.3:o:linux:linux_kernel:6.2.2
-
cpe:2.3:o:linux:linux_kernel:6.2.3
-
cpe:2.3:o:linux:linux_kernel:6.2.4
-
cpe:2.3:o:linux:linux_kernel:6.2.5
-
cpe:2.3:o:linux:linux_kernel:6.2.6
-
cpe:2.3:o:linux:linux_kernel:6.2.7
-
cpe:2.3:o:linux:linux_kernel:6.2.8
-
cpe:2.3:o:linux:linux_kernel:6.2.9
-
cpe:2.3:o:linux:linux_kernel:6.3
-
cpe:2.3:o:linux:linux_kernel:6.3.1
-
cpe:2.3:o:linux:linux_kernel:6.3.10
-
cpe:2.3:o:linux:linux_kernel:6.3.11
-
cpe:2.3:o:linux:linux_kernel:6.3.12
-
cpe:2.3:o:linux:linux_kernel:6.3.13
-
cpe:2.3:o:linux:linux_kernel:6.3.2
-
cpe:2.3:o:linux:linux_kernel:6.3.3
-
cpe:2.3:o:linux:linux_kernel:6.3.4
-
cpe:2.3:o:linux:linux_kernel:6.3.5
-
cpe:2.3:o:linux:linux_kernel:6.3.6
-
cpe:2.3:o:linux:linux_kernel:6.3.7
-
cpe:2.3:o:linux:linux_kernel:6.3.8
-
cpe:2.3:o:linux:linux_kernel:6.3.9
-
cpe:2.3:o:linux:linux_kernel:6.4
-
cpe:2.3:o:linux:linux_kernel:6.4.1
-
cpe:2.3:o:linux:linux_kernel:6.4.10
-
cpe:2.3:o:linux:linux_kernel:6.4.11
-
cpe:2.3:o:linux:linux_kernel:6.4.12
-
cpe:2.3:o:linux:linux_kernel:6.4.13
-
cpe:2.3:o:linux:linux_kernel:6.4.14
-
cpe:2.3:o:linux:linux_kernel:6.4.15
-
cpe:2.3:o:linux:linux_kernel:6.4.16
-
cpe:2.3:o:linux:linux_kernel:6.4.2
-
cpe:2.3:o:linux:linux_kernel:6.4.3
-
cpe:2.3:o:linux:linux_kernel:6.4.4
-
cpe:2.3:o:linux:linux_kernel:6.4.5
-
cpe:2.3:o:linux:linux_kernel:6.4.6
-
cpe:2.3:o:linux:linux_kernel:6.4.7
-
cpe:2.3:o:linux:linux_kernel:6.4.8
-
cpe:2.3:o:linux:linux_kernel:6.4.9
-
cpe:2.3:o:linux:linux_kernel:6.5
-
cpe:2.3:o:linux:linux_kernel:6.5.1
-
cpe:2.3:o:linux:linux_kernel:6.5.2
-
cpe:2.3:o:linux:linux_kernel:6.5.3