Skip to content

Commit

Permalink
devargs: fix memory leak on parsing failure
Browse files Browse the repository at this point in the history
[ upstream commit e132ee8 ]

This patch fixes memory leak in parsing error handling.

Fixes: 338327d ("devargs: add function to parse device layers")

Signed-off-by: Xueming Li <xuemingl@nvidia.com>
Reviewed-by: Gaetan Rivet <grive@u256.net>
  • Loading branch information
steevenlee authored and cpaelzer committed May 17, 2021
1 parent 659d4fc commit 4dc48d7
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion lib/librte_eal/common/eal_common_devargs.c
Expand Up @@ -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);
Expand All @@ -81,6 +82,7 @@ rte_devargs_layers_parse(struct rte_devargs *devargs,
ret = -ENOMEM;
goto get_out;
}
allocated_data = true;
s = devargs->data;
}

Expand Down Expand Up @@ -163,8 +165,14 @@ rte_devargs_layers_parse(struct rte_devargs *devargs,
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;
}

Expand Down

0 comments on commit 4dc48d7

Please sign in to comment.