From db3fda2e683a82dea4905fd2b61434ac4ae8f9a8 Mon Sep 17 00:00:00 2001 From: Cunyin Chang Date: Wed, 23 Mar 2016 12:38:40 +0800 Subject: [PATCH] nvme: handle NULL ioq array in nvme_ctrlr_destruct() Fix a potential segmentation fault issue. Change-Id: I39d2cd1850265ca0dfa987995011563cadeb5bb5 Signed-off-by: Cunyin Chang --- lib/nvme/nvme_ctrlr.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index c8a3255a2..28049853f 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -397,8 +397,10 @@ nvme_ctrlr_fail(struct spdk_nvme_ctrlr *ctrlr) ctrlr->is_failed = true; nvme_qpair_fail(&ctrlr->adminq); - for (i = 0; i < ctrlr->opts.num_io_queues; i++) { - nvme_qpair_fail(&ctrlr->ioq[i]); + if (ctrlr->ioq) { + for (i = 0; i < ctrlr->opts.num_io_queues; i++) { + nvme_qpair_fail(&ctrlr->ioq[i]); + } } } @@ -1029,9 +1031,10 @@ nvme_ctrlr_destruct(struct spdk_nvme_ctrlr *ctrlr) nvme_ctrlr_shutdown(ctrlr); nvme_ctrlr_destruct_namespaces(ctrlr); - - for (i = 0; i < ctrlr->opts.num_io_queues; i++) { - nvme_qpair_destroy(&ctrlr->ioq[i]); + if (ctrlr->ioq) { + for (i = 0; i < ctrlr->opts.num_io_queues; i++) { + nvme_qpair_destroy(&ctrlr->ioq[i]); + } } free(ctrlr->ioq);