From: Ming Lei <ming.lei@redhat.com>
To: linan666@huaweicloud.com
Cc: axboe@kernel.dk, ZiyangZhang@linux.alibaba.com,
czhong@redhat.com, linux-block@vger.kernel.org,
linux-kernel@vger.kernel.org, yukuai3@huawei.com,
yi.zhang@huawei.com, houtao1@huawei.com, yangerkun@huawei.com
Subject: Re: [PATCH] ublk_drv: fix NULL pointer dereference in ublk_ctrl_start_recovery()
Date: Mon, 3 Jun 2024 08:39:00 +0800 [thread overview]
Message-ID: <Zl0QpCbYVHIkKa/H@fedora> (raw)
In-Reply-To: <20240529095313.2568595-1-linan666@huaweicloud.com>
On Wed, May 29, 2024 at 05:53:13PM +0800, linan666@huaweicloud.com wrote:
> From: Li Nan <linan122@huawei.com>
>
> 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.
>
> Continuing execution after WARN is incorrect, as 'ubq->ubq_daemon' is
> known to be NULL. Fix it by return directly if the WARN is triggered.
>
> Note that WARN will still be triggered after the fix if anyone tries to
> start recovery twice.
>
> 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@redhat.com>
> Closes: https://lore.kernel.org/all/CAGVVp+UvLiS+bhNXV-h2icwX1dyybbYHeQUuH7RYqUvMQf6N3w@mail.gmail.com
> Signed-off-by: Li Nan <linan122@huawei.com>
> ---
> drivers/block/ublk_drv.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c
> index 4e159948c912..99b621b2d40f 100644
> --- a/drivers/block/ublk_drv.c
> +++ b/drivers/block/ublk_drv.c
> @@ -2630,7 +2630,8 @@ static void ublk_queue_reinit(struct ublk_device *ub, struct ublk_queue *ubq)
> {
> int i;
>
> - WARN_ON_ONCE(!(ubq->ubq_daemon && ubq_daemon_is_dying(ubq)));
> + if (WARN_ON_ONCE(!(ubq->ubq_daemon && ubq_daemon_is_dying(ubq))))
> + return;
Yeah, it is one bug. However, it could be addressed by adding the check in
ublk_ctrl_start_recovery() and return immediately in case of NULL ubq->ubq_daemon,
what do you think about this way?
Thanks,
Ming
next prev parent reply other threads:[~2024-06-03 0:39 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-29 9:53 [PATCH] ublk_drv: fix NULL pointer dereference in ublk_ctrl_start_recovery() linan666
2024-06-03 0:39 ` Ming Lei [this message]
2024-06-03 2:19 ` Li Nan
2024-06-03 2:43 ` Ming Lei
2024-06-04 1:32 ` Changhui Zhong
2024-06-04 13:14 ` Li Nan
2024-06-05 1:40 ` Li Nan
2024-06-05 7:20 ` Changhui Zhong
2024-06-05 9:47 ` Ming Lei
2024-06-06 4:48 ` Changhui Zhong
2024-06-06 8:05 ` Li Nan
2024-06-06 9:52 ` Ming Lei
2024-06-08 6:34 ` Li Nan
2024-06-08 14:16 ` Ming Lei
2024-06-06 13:43 ` Changhui Zhong
2024-06-08 6:44 ` Li Nan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Zl0QpCbYVHIkKa/H@fedora \
--to=ming.lei@redhat.com \
--cc=ZiyangZhang@linux.alibaba.com \
--cc=axboe@kernel.dk \
--cc=czhong@redhat.com \
--cc=houtao1@huawei.com \
--cc=linan666@huaweicloud.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=yangerkun@huawei.com \
--cc=yi.zhang@huawei.com \
--cc=yukuai3@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.