From 03323b09a4cde05eabc867d53a94b07773bb484a Mon Sep 17 00:00:00 2001 From: Ziye Yang Date: Mon, 19 Jul 2021 18:57:36 +0800 Subject: [PATCH] nvme/ctrlr: Fix the invalid access of free_io_qids array. To fix the segment fault. Fixes issue #1749 Reported by user: https://github.com/rdxsasha Signed-off-by: Ziye Yang Change-Id: I130d8dba04e4a3e83c22c5967507c1297a048f0b Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/8813 Reviewed-by: Shuhei Matsumoto Reviewed-by: Aleksey Marchuk Reviewed-by: Changpeng Liu Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins --- lib/nvme/nvme_ctrlr.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index d1675e28d2..27ba6e9d72 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -4436,6 +4436,10 @@ spdk_nvme_ctrlr_free_qid(struct spdk_nvme_ctrlr *ctrlr, uint16_t qid) assert(qid <= ctrlr->opts.num_io_queues); nvme_robust_mutex_lock(&ctrlr->ctrlr_lock); - spdk_bit_array_set(ctrlr->free_io_qids, qid); + + if (spdk_likely(ctrlr->free_io_qids)) { + spdk_bit_array_set(ctrlr->free_io_qids, qid); + } + nvme_robust_mutex_unlock(&ctrlr->ctrlr_lock); }