From 90324e8525488467b571a22c2acb18c55122c22b Mon Sep 17 00:00:00 2001 From: Wu Bo Date: Thu, 7 Apr 2022 14:50:26 +0800 Subject: [PATCH] Fix memory leak when nvme_scan_toplopy return failed --- fabrics.c | 6 ++++++ nvme.c | 7 ++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/fabrics.c b/fabrics.c index 5f850e58..4ae40819 100644 --- a/fabrics.c +++ b/fabrics.c @@ -575,6 +575,7 @@ int nvmf_discover(const char *desc, int argc, char **argv, bool connect) if (ret < 0) { fprintf(stderr, "Failed to scan topoplogy: %s\n", nvme_strerror(errno)); + nvme_free_tree(r); return ret; } @@ -766,6 +767,7 @@ int nvmf_connect(const char *desc, int argc, char **argv) if (ret < 0) { fprintf(stderr, "Failed to scan topoplogy: %s\n", nvme_strerror(errno)); + nvme_free_tree(r); return ret; } nvme_read_config(r, config_file); @@ -861,6 +863,7 @@ int nvmf_disconnect(const char *desc, int argc, char **argv) if (ret < 0) { fprintf(stderr, "Failed to scan topoplogy: %s\n", nvme_strerror(errno)); + nvme_free_tree(r); return ret; } @@ -947,6 +950,7 @@ int nvmf_disconnect_all(const char *desc, int argc, char **argv) if (ret < 0) { fprintf(stderr, "Failed to scan topoplogy: %s\n", nvme_strerror(errno)); + nvme_free_tree(r); return ret; } @@ -1017,6 +1021,7 @@ int nvmf_config(const char *desc, int argc, char **argv) if (ret < 0) { fprintf(stderr, "Failed to scan topoplogy: %s\n", nvme_strerror(errno)); + nvme_free_tree(r); return ret; } } @@ -1155,6 +1160,7 @@ int nvmf_dim(const char *desc, int argc, char **argv) if (ret < 0) { fprintf(stderr, "Failed to scan topoplogy: %s\n", nvme_strerror(errno)); + nvme_free_tree(r); return ret; } diff --git a/nvme.c b/nvme.c index 5f7763ce..d7d895ec 100644 --- a/nvme.c +++ b/nvme.c @@ -2503,7 +2503,7 @@ static bool nvme_match_device_filter(nvme_subsystem_t s) static int list_subsys(int argc, char **argv, struct command *cmd, struct plugin *plugin) { - nvme_root_t r; + nvme_root_t r = NULL; enum nvme_print_flags flags; const char *desc = "Retrieve information for subsystems"; const char *verbose = "Increase output verbosity"; @@ -2577,9 +2577,9 @@ static int list_subsys(int argc, char **argv, struct command *cmd, } nvme_show_subsystem_list(r, nsid, flags); - nvme_free_tree(r); - ret: + if (r) + nvme_free_tree(r); return err; } @@ -2631,6 +2631,7 @@ static int list(int argc, char **argv, struct command *cmd, struct plugin *plugi if (err < 0) { fprintf(stderr, "Failed to scan topoplogy: %s\n", nvme_strerror(errno)); + nvme_free_tree(r); return err; } -- 2.50.1