From: Keith Busch Date: Fri, 25 Apr 2014 00:53:50 +0000 (-0600) Subject: NVMe: Protect against badly formatted CQEs X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=94bbac4052eb93219ca0aa370ca741486b25fb98;p=openwrt%2Fstaging%2Fblogic.git NVMe: Protect against badly formatted CQEs If a misbehaving device posts a CQE with a command id < depth but for one that was never allocated, the command info will have a callback function set to NULL and we don't want to try invoking that. Signed-off-by: Keith Busch Signed-off-by: Matthew Wilcox --- diff --git a/drivers/block/nvme-core.c b/drivers/block/nvme-core.c index 074e9829bb08..b9f07f81ea5d 100644 --- a/drivers/block/nvme-core.c +++ b/drivers/block/nvme-core.c @@ -243,8 +243,9 @@ static void *free_cmdid(struct nvme_queue *nvmeq, int cmdid, void *ctx; struct nvme_cmd_info *info = nvme_cmd_info(nvmeq); - if (cmdid >= nvmeq->q_depth) { - *fn = special_completion; + if (cmdid >= nvmeq->q_depth || !info[cmdid].fn) { + if (fn) + *fn = special_completion; return CMD_CTX_INVALID; } if (fn)