devargs: fix memory leak on parsing failure

This patch fixes memory leak in parsing error handling.

Fixes: 338327d731e6 ("devargs: add function to parse device layers")
Cc: stable@dpdk.org

Signed-off-by: Xueming Li <xuemingl@nvidia.com>
Reviewed-by: Gaetan Rivet <grive@u256.net>
This commit is contained in:
Xueming Li 2021-04-13 03:14:09 +00:00 committed by Thomas Monjalon
parent 64051bb1f1
commit e132ee8690

View File

@ -60,6 +60,7 @@ rte_devargs_layers_parse(struct rte_devargs *devargs,
size_t nblayer;
size_t i = 0;
int ret = 0;
bool allocated_data = false;
/* Split each sub-lists. */
nblayer = devargs_layer_count(devstr);
@ -81,6 +82,7 @@ rte_devargs_layers_parse(struct rte_devargs *devargs,
ret = -ENOMEM;
goto get_out;
}
allocated_data = true;
s = devargs->data;
}
@ -163,8 +165,14 @@ get_out:
if (layers[i].kvlist)
rte_kvargs_free(layers[i].kvlist);
}
if (ret != 0)
if (ret != 0) {
if (allocated_data) {
/* Free duplicated data. */
free(devargs->data);
devargs->data = NULL;
}
rte_errno = -ret;
}
return ret;
}