[v2,1/5] devargs: fix memory leak on parsing error
Checks
Commit Message
This patch fixes memory leak in parsing error handling.
Fixes: 338327d731e6 ("devargs: add function to parse device layers")
Cc: gaetan.rivet@6wind.com
Cc: stable@dpdk.org
Signed-off-by: Xueming Li <xuemingl@nvidia.com>
---
lib/librte_eal/common/eal_common_devargs.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
Comments
18/01/2021 16:16, Xueming Li:
> --- a/lib/librte_eal/common/eal_common_devargs.c
> +++ b/lib/librte_eal/common/eal_common_devargs.c
> + if (ret != 0) {
> + if (devargs->data && devargs->data != devstr) {
Better to make comparison explicit:
if (devargs->data != NULL
> + /* Free duplicated data. */
> + free(devargs->data);
Before patch 2, devargs->data is const,
so we cannot free (compilation error).
@@ -163,8 +163,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 (devargs->data && devargs->data != devstr) {
+ /* Free duplicated data. */
+ free(devargs->data);
+ devargs->data = NULL;
+ }
rte_errno = -ret;
+ }
return ret;
}