Re: [PATCH v5 5/6] nbd: convert to use blk_mq_find_and_get_req()

From: Ming Lei
Date: Mon Sep 13 2021 - 21:11:56 EST


On Thu, Sep 09, 2021 at 10:12:55PM +0800, Yu Kuai wrote:
> blk_mq_tag_to_rq() can only ensure to return valid request in
> following situation:
>
> 1) client send request message to server first
> submit_bio
> ...
> blk_mq_get_tag
> ...
> blk_mq_get_driver_tag
> ...
> nbd_queue_rq
> nbd_handle_cmd
> nbd_send_cmd
>
> 2) client receive respond message from server
> recv_work
> nbd_read_stat
> blk_mq_tag_to_rq
>
> If step 1) is missing, blk_mq_tag_to_rq() will return a stale
> request, which might be freed. Thus convert to use
> blk_mq_find_and_get_req() to make sure the returned request is not
> freed.

But NBD_CMD_INFLIGHT has been added for checking if the reply is
expected, do we still need blk_mq_find_and_get_req() for covering
this issue? BTW, request and its payload is pre-allocated, so there
isn't real use-after-free.


Thanks,
Ming