Add verify strdup() return value logic.

Fixes: 293c53d8b23c ("eal: add telemetry callbacks")
Fixes: 0d0f478d0483 ("eal/linux: add uevent parse and process")
Cc: sta...@dpdk.org

Signed-off-by: Chengwen Feng <fengcheng...@huawei.com>
---
 lib/eal/common/eal_common_options.c | 24 ++++++++++++++++++++++--
 lib/eal/linux/eal_dev.c             |  3 +++
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/lib/eal/common/eal_common_options.c 
b/lib/eal/common/eal_common_options.c
index a6d21f1cba..8b5a4632dd 100644
--- a/lib/eal/common/eal_common_options.c
+++ b/lib/eal/common/eal_common_options.c
@@ -226,6 +226,8 @@ eal_save_args(int argc, char **argv)
                if (strcmp(argv[i], "--") == 0)
                        break;
                eal_args[i] = strdup(argv[i]);
+               if (eal_args[i] == NULL)
+                       goto error;
        }
        eal_args[i++] = NULL; /* always finish with NULL */
 
@@ -235,13 +237,31 @@ eal_save_args(int argc, char **argv)
 
        eal_app_args = calloc(argc - i + 1, sizeof(*eal_args));
        if (eal_app_args == NULL)
-               return -1;
+               goto error;
 
-       for (j = 0; i < argc; j++, i++)
+       for (j = 0; i < argc; j++, i++) {
                eal_app_args[j] = strdup(argv[i]);
+               if (eal_app_args[j] == NULL)
+                       goto error;
+       }
        eal_app_args[j] = NULL;
 
        return 0;
+
+error:
+       if (eal_app_args != NULL) {
+               i = 0;
+               while (eal_app_args[i] != NULL)
+                       free(eal_app_args[i++]);
+               free(eal_app_args);
+               eal_app_args = NULL;
+       }
+       i = 0;
+       while (eal_args[i] != NULL)
+               free(eal_args[i++]);
+       free(eal_args);
+       eal_args = NULL;
+       return -1;
 }
 #endif
 
diff --git a/lib/eal/linux/eal_dev.c b/lib/eal/linux/eal_dev.c
index ac76f6174d..df3cd6b39a 100644
--- a/lib/eal/linux/eal_dev.c
+++ b/lib/eal/linux/eal_dev.c
@@ -181,7 +181,10 @@ dev_uev_parse(const char *buf, struct rte_dev_event 
*event, int length)
                        buf += 14;
                        i += 14;
                        strlcpy(pci_slot_name, buf, sizeof(subsystem));
+                       free(event->devname);
                        event->devname = strdup(pci_slot_name);
+                       if (event->devname == NULL)
+                               return -1;
                }
                for (; i < length; i++) {
                        if (*buf == '\0')
-- 
2.17.1

Reply via email to