Patch "ublk_drv: fix NULL pointer dereference in ublk_ctrl_start_recovery()" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    ublk_drv: fix NULL pointer dereference in ublk_ctrl_start_recovery()

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     ublk_drv-fix-null-pointer-dereference-in-ublk_ctrl_s.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 983297b71fd637e48d2b1447a70e102dacc879f6
Author: Li Nan <linan122@xxxxxxxxxx>
Date:   Wed Sep 4 11:13:48 2024 +0800

    ublk_drv: fix NULL pointer dereference in ublk_ctrl_start_recovery()
    
    [ Upstream commit e58f5142f88320a5b1449f96a146f2f24615c5c7 ]
    
    When two UBLK_CMD_START_USER_RECOVERY commands are submitted, the
    first one sets 'ubq->ubq_daemon' to NULL, and the second one triggers
    WARN in ublk_queue_reinit() and subsequently a NULL pointer dereference
    issue.
    
    Fix it by adding the check in ublk_ctrl_start_recovery() and return
    immediately in case of zero 'ub->nr_queues_ready'.
    
      BUG: kernel NULL pointer dereference, address: 0000000000000028
      RIP: 0010:ublk_ctrl_start_recovery.constprop.0+0x82/0x180
      Call Trace:
       <TASK>
       ? __die+0x20/0x70
       ? page_fault_oops+0x75/0x170
       ? exc_page_fault+0x64/0x140
       ? asm_exc_page_fault+0x22/0x30
       ? ublk_ctrl_start_recovery.constprop.0+0x82/0x180
       ublk_ctrl_uring_cmd+0x4f7/0x6c0
       ? pick_next_task_idle+0x26/0x40
       io_uring_cmd+0x9a/0x1b0
       io_issue_sqe+0x193/0x3f0
       io_wq_submit_work+0x9b/0x390
       io_worker_handle_work+0x165/0x360
       io_wq_worker+0xcb/0x2f0
       ? finish_task_switch.isra.0+0x203/0x290
       ? finish_task_switch.isra.0+0x203/0x290
       ? __pfx_io_wq_worker+0x10/0x10
       ret_from_fork+0x2d/0x50
       ? __pfx_io_wq_worker+0x10/0x10
       ret_from_fork_asm+0x1a/0x30
       </TASK>
    
    Fixes: c732a852b419 ("ublk_drv: add START_USER_RECOVERY and END_USER_RECOVERY support")
    Reported-and-tested-by: Changhui Zhong <czhong@xxxxxxxxxx>
    Closes: https://lore.kernel.org/all/CAGVVp+UvLiS+bhNXV-h2icwX1dyybbYHeQUuH7RYqUvMQf6N3w@xxxxxxxxxxxxxx
    Reviewed-by: Ming Lei <ming.lei@xxxxxxxxxx>
    Signed-off-by: Li Nan <linan122@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20240904031348.4139545-1-ming.lei@xxxxxxxxxx
    Signed-off-by: Jens Axboe <axboe@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c
index 3fa74051f31b..bfd643856f64 100644
--- a/drivers/block/ublk_drv.c
+++ b/drivers/block/ublk_drv.c
@@ -1915,6 +1915,8 @@ static int ublk_ctrl_start_recovery(struct ublk_device *ub,
 	mutex_lock(&ub->mutex);
 	if (!ublk_can_use_recovery(ub))
 		goto out_unlock;
+	if (!ub->nr_queues_ready)
+		goto out_unlock;
 	/*
 	 * START_RECOVERY is only allowd after:
 	 *




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux