Static analysis reports that we leak ndctl_cmd in the above function. Fix by adding a proper cleanup path.
Cc: Dave Jiang <[email protected]> Fixes: f86369ea29e2 ("ndctl: merge firmware-update into dimm.c as another dimm operation") Signed-off-by: Vishal Verma <[email protected]> --- ndctl/dimm.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/ndctl/dimm.c b/ndctl/dimm.c index 97643a3..a4203f3 100644 --- a/ndctl/dimm.c +++ b/ndctl/dimm.c @@ -428,36 +428,39 @@ static int submit_get_firmware_info(struct ndctl_dimm *dimm, rc = ndctl_cmd_submit(cmd); if (rc < 0) - return rc; + goto out; + rc = -ENXIO; status = ndctl_cmd_fw_xlat_firmware_status(cmd); if (status != FW_SUCCESS) { fprintf(stderr, "GET FIRMWARE INFO on DIMM %s failed: %#x\n", ndctl_dimm_get_devname(dimm), status); - return -ENXIO; + goto out; } fw->store_size = ndctl_cmd_fw_info_get_storage_size(cmd); if (fw->store_size == UINT_MAX) - return -ENXIO; + goto out; fw->update_size = ndctl_cmd_fw_info_get_max_send_len(cmd); if (fw->update_size == UINT_MAX) - return -ENXIO; + goto out; fw->query_interval = ndctl_cmd_fw_info_get_query_interval(cmd); if (fw->query_interval == UINT_MAX) - return -ENXIO; + goto out; fw->max_query = ndctl_cmd_fw_info_get_max_query_time(cmd); if (fw->max_query == UINT_MAX) - return -ENXIO; + goto out; fw->run_version = ndctl_cmd_fw_info_get_run_version(cmd); if (fw->run_version == ULLONG_MAX) - return -ENXIO; + goto out; rc = verify_fw_size(uctx); + +out: ndctl_cmd_unref(cmd); return rc; } -- 2.14.4 _______________________________________________ Linux-nvdimm mailing list [email protected] https://lists.01.org/mailman/listinfo/linux-nvdimm
