bdev/nvme: Fix descriptor leak in apply firmware RPC

Change-Id: I1a82e1c248d573f3a99e661bc7fef0871cfcc7f4
Signed-off-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.gerrithub.io/406993
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
This commit is contained in:
Ben Walker 2018-04-09 10:57:31 -07:00 committed by Daniel Verkamp
parent 96fcdf93e7
commit a615ae7e26

View File

@ -374,22 +374,24 @@ spdk_rpc_apply_nvme_firmware(struct spdk_jsonrpc_request *request,
continue; continue;
} }
if ((rc = spdk_bdev_open(bdev2, true, NULL, NULL, &desc)) != 0) { if (!(opt = malloc(sizeof(struct open_descriptors)))) {
snprintf(msg, sizeof(msg), "Device %s is in use.", firm_ctx->req->bdev_name); snprintf(msg, sizeof(msg), "Memory allocation error.");
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR, msg); spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR, msg);
apply_firmware_cleanup(firm_ctx); apply_firmware_cleanup(firm_ctx);
return; 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);
} }
/* /*