[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200916165433.GA3675881@dhcp-10-100-145-180.wdl.wdc.com>
Date: Wed, 16 Sep 2020 09:54:33 -0700
From: Keith Busch <kbusch@...nel.org>
To: Tong Zhang <ztong0001@...il.com>
Cc: Jens Axboe <axboe@...com>, Christoph Hellwig <hch@....de>,
Sagi Grimberg <sagi@...mberg.me>,
linux-nvme@...ts.infradead.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] nvme: fix NULL pointer dereference
On Wed, Sep 16, 2020 at 11:36:49AM -0400, Tong Zhang wrote:
> @@ -960,6 +960,8 @@ static inline void nvme_handle_cqe(struct nvme_queue *nvmeq, u16 idx)
> }
>
> req = blk_mq_tag_to_rq(nvme_queue_tagset(nvmeq), cqe->command_id);
> + if (!req)
> + return;
As I mentioned before, blk_mq_tag_to_rq() returns NULL if the tag
exceeds the depth. We already verify the tag prior to calling this
function, so what's the real root cause for how we're winding up with
NULL here? I'm only asking this because it sounds like there's a bug
somewhere else and this change is masking over it.
> trace_nvme_sq(req, cqe->sq_head, nvmeq->sq_tail);
> if (!nvme_try_complete_req(req, cqe->status, cqe->result))
> nvme_pci_complete_rq(req);
Powered by blists - more mailing lists