ublk: fix race between io_uring_cmd_complete_in_task and ublk_cancel_cmd block-6.15-20250424
authorMing Lei <ming.lei@redhat.com>
Fri, 25 Apr 2025 01:37:40 +0000 (09:37 +0800)
committerJens Axboe <axboe@kernel.dk>
Fri, 25 Apr 2025 01:52:20 +0000 (19:52 -0600)
commitf40139fde5278d81af3227444fd6e76a76b9506d
treeee9f4a08af52c19113189b707fd0ad80c72426d5
parentd6aa0c178bf81f30ae4a780b2bca653daa2eb633
ublk: fix race between io_uring_cmd_complete_in_task and ublk_cancel_cmd

ublk_cancel_cmd() calls io_uring_cmd_done() to complete uring_cmd, but
we may have scheduled task work via io_uring_cmd_complete_in_task() for
dispatching request, then kernel crash can be triggered.

Fix it by not trying to canceling the command if ublk block request is
started.

Fixes: 216c8f5ef0f2 ("ublk: replace monitor with cancelable uring_cmd")
Reported-by: Jared Holzman <jholzman@nvidia.com>
Tested-by: Jared Holzman <jholzman@nvidia.com>
Closes: https://lore.kernel.org/linux-block/d2179120-171b-47ba-b664-23242981ef19@nvidia.com/
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/20250425013742.1079549-3-ming.lei@redhat.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/ublk_drv.c