devargs: fix memory leak on parsing failure
authorXueming Li <xuemingl@nvidia.com>
Tue, 13 Apr 2021 03:14:09 +0000 (03:14 +0000)
committerThomas Monjalon <thomas@monjalon.net>
Wed, 14 Apr 2021 20:25:15 +0000 (22:25 +0200)
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>
lib/librte_eal/common/eal_common_devargs.c

index 48f85ee..e40b91e 100644 (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;
 }