From a615ae7e26d9575ce02798da021e80df4439e006 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Mon, 9 Apr 2018 10:57:31 -0700 Subject: [PATCH] bdev/nvme: Fix descriptor leak in apply firmware RPC Change-Id: I1a82e1c248d573f3a99e661bc7fef0871cfcc7f4 Signed-off-by: Ben Walker Reviewed-on: https://review.gerrithub.io/406993 Reviewed-by: Daniel Verkamp Reviewed-by: Jim Harris Tested-by: SPDK Automated Test System Reviewed-by: Changpeng Liu --- lib/bdev/nvme/bdev_nvme_rpc.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/lib/bdev/nvme/bdev_nvme_rpc.c b/lib/bdev/nvme/bdev_nvme_rpc.c index e95e41683..069cd7d8d 100644 --- a/lib/bdev/nvme/bdev_nvme_rpc.c +++ b/lib/bdev/nvme/bdev_nvme_rpc.c @@ -374,22 +374,24 @@ spdk_rpc_apply_nvme_firmware(struct spdk_jsonrpc_request *request, continue; } - if ((rc = spdk_bdev_open(bdev2, true, NULL, NULL, &desc)) != 0) { - snprintf(msg, sizeof(msg), "Device %s is in use.", firm_ctx->req->bdev_name); + if (!(opt = malloc(sizeof(struct open_descriptors)))) { + snprintf(msg, sizeof(msg), "Memory allocation error."); spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR, msg); apply_firmware_cleanup(firm_ctx); return; - } else { - if (!(opt = malloc(sizeof(struct open_descriptors)))) { - snprintf(msg, sizeof(msg), "Memory allocation error."); - spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR, msg); - apply_firmware_cleanup(firm_ctx); - return; - } - opt->desc = desc; - opt->bdev = bdev; - TAILQ_INSERT_TAIL(&firm_ctx->desc_head, opt, tqlst); } + + if ((rc = spdk_bdev_open(bdev2, true, NULL, NULL, &desc)) != 0) { + snprintf(msg, sizeof(msg), "Device %s is in use.", firm_ctx->req->bdev_name); + spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR, msg); + free(opt); + apply_firmware_cleanup(firm_ctx); + return; + } + + opt->desc = desc; + opt->bdev = bdev; + TAILQ_INSERT_TAIL(&firm_ctx->desc_head, opt, tqlst); } /*