CVE-2023-53366

block: be a bit more careful in checking for NULL bdev while polling

Medium · published September 17, 2025

CVSS v3.1
5.5
EPSS
0%
Percentile
8.3
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

block: be a bit more careful in checking for NULL bdev while polling

Wei reports a crash with an application using polled IO:

PGD 14265e067 P4D 14265e067 PUD 47ec50067 PMD 0

Oops: 0000 [#1] SMP

CPU: 0 PID: 21915 Comm: iocore_0 Kdump: loaded Tainted: G S 5.12.0-0_fbk12_clang_7346_g1bb6f2e7058f #1

Hardware name: Wiwynn Delta Lake MP T8/Delta Lake-Class2, BIOS Y3DLM08 04/10/2022

RIP: 0010:bio_poll+0x25/0x200

Code: 0f 1f 44 00 00 0f 1f 44 00 00 55 41 57 41 56 41 55 41 54 53 48 83 ec 28 65 48 8b 04 25 28 00 00 00 48 89 44 24 20 48 8b 47 08 <48> 8b 80 70 02 00 00 4c 8b 70 50 8b 6f 34 31 db 83 fd ff 75 25 65

RSP: 0018:ffffc90005fafdf8 EFLAGS: 00010292

RAX: 0000000000000000 RBX: 0000000000000000 RCX: 74b43cd65dd66600

RDX: 0000000000000003 RSI: ffffc90005fafe78 RDI: ffff8884b614e140

RBP: ffff88849964df78 R08: 0000000000000000 R09: 0000000000000008

R10: 0000000000000000 R11: 0000000000000000 R12: ffff88849964df00

R13: ffffc90005fafe78 R14: ffff888137d3c378 R15: 0000000000000001

FS: 00007fd195000640(0000) GS:ffff88903f400000(0000) knlGS:0000000000000000

CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033

CR2: 0000000000000270 CR3: 0000000466121001 CR4: 00000000007706f0

DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000

DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400

PKRU: 55555554

Call Trace:

iocb_bio_iopoll+0x1d/0x30

io_do_iopoll+0xac/0x250

__se_sys_io_uring_enter+0x3c5/0x5a0

? __x64_sys_write+0x89/0xd0

do_syscall_64+0x2d/0x40

entry_SYSCALL_64_after_hwframe+0x44/0xae

RIP: 0033:0x94f225d

Code: 24 cc 00 00 00 41 8b 84 24 d0 00 00 00 c1 e0 04 83 e0 10 41 09 c2 8b 33 8b 53 04 4c 8b 43 18 4c 63 4b 0c b8 aa 01 00 00 0f 05 <85> c0 0f 88 85 00 00 00 29 03 45 84 f6 0f 84 88 00 00 00 41 f6 c7

RSP: 002b:00007fd194ffcd88 EFLAGS: 00000202 ORIG_RAX: 00000000000001aa

RAX: ffffffffffffffda RBX: 00007fd194ffcdc0 RCX: 00000000094f225d

RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000007

RBP: 00007fd194ffcdb0 R08: 0000000000000000 R09: 0000000000000008

R10: 0000000000000001 R11: 0000000000000202 R12: 00007fd269d68030

R13: 0000000000000000 R14: 0000000000000001 R15: 0000000000000000

which is due to bio->bi_bdev being NULL. This can happen if we have two

tasks doing polled IO, and task B ends up completing IO from task A if

they are sharing a poll queue. If task B completes the IO and puts the

bio into our cache, then it can allocate that bio again before task A

is done polling for it. As that would necessitate a preempt between the

two tasks, it's enough to just be a bit more careful in checking for

whether or not bio->bi_bdev is NULL.

The record
Technical detail
CVSS v3.1
5.5 · MEDIUM
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
CVSS v4.0
Not supplied
EPSS
0.00191 · 8.3th percentile
Published
2025-09-17T14:56Z
EPSS history
Timeline
  • 17 SEP 14:56Z
    block: be a bit more careful in checking for NULL bdev while polling
    cvelistv5