bus/fslmc: fix memory leak and cleanup

Coverity issue: 268327
Fixes: 828d51d8fc ("bus/fslmc: refactor scan and probe functions")
Cc: stable@dpdk.org

Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
This commit is contained in:
Shreyansh Jain 2018-05-09 20:57:51 +05:30 committed by Thomas Monjalon
parent fe33fe37fd
commit 58b7c9ceed

View File

@ -569,38 +569,39 @@ fslmc_process_iodevices(struct rte_dpaa2_device *dev)
static int
fslmc_process_mcp(struct rte_dpaa2_device *dev)
{
int ret;
intptr_t v_addr;
char *dev_name;
char *dev_name = NULL;
struct fsl_mc_io dpmng = {0};
struct mc_version mc_ver_info = {0};
rte_mcp_ptr_list = malloc(sizeof(void *) * 1);
if (!rte_mcp_ptr_list) {
DPAA2_BUS_ERR("Unable to allocate MC portal memory");
return -ENOMEM;
ret = -ENOMEM;
goto cleanup;
}
dev_name = strdup(dev->device.name);
if (!dev_name) {
DPAA2_BUS_ERR("Unable to allocate MC device name memory");
free(rte_mcp_ptr_list);
rte_mcp_ptr_list = NULL;
return -ENOMEM;
ret = -ENOMEM;
goto cleanup;
}
v_addr = vfio_map_mcp_obj(&vfio_group, dev_name);
if (v_addr == (intptr_t)MAP_FAILED) {
DPAA2_BUS_ERR("Error mapping region (errno = %d)", errno);
free(rte_mcp_ptr_list);
rte_mcp_ptr_list = NULL;
return -1;
ret = -1;
goto cleanup;
}
/* check the MC version compatibility */
dpmng.regs = (void *)v_addr;
if (mc_get_version(&dpmng, CMD_PRI_LOW, &mc_ver_info)) {
DPAA2_BUS_ERR("Unable to obtain MC version");
return -1;
ret = -1;
goto cleanup;
}
if ((mc_ver_info.major != MC_VER_MAJOR) ||
@ -610,13 +611,24 @@ fslmc_process_mcp(struct rte_dpaa2_device *dev)
MC_VER_MAJOR, MC_VER_MINOR,
mc_ver_info.major, mc_ver_info.minor,
mc_ver_info.revision);
free(rte_mcp_ptr_list);
rte_mcp_ptr_list = NULL;
return -1;
ret = -1;
goto cleanup;
}
rte_mcp_ptr_list[0] = (void *)v_addr;
free(dev_name);
return 0;
cleanup:
if (dev_name)
free(dev_name);
if (rte_mcp_ptr_list) {
free(rte_mcp_ptr_list);
rte_mcp_ptr_list = NULL;
}
return ret;
}
int