linux-nvme.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: mwilck@suse.com
To: Sagi Grimberg <sagi@grimberg.me>, Hannes Reinecke <hare@suse.de>,
	Keith Busch <kbusch@kernel.org>
Cc: Chaitanya Kulkarni <Chaitanya.Kulkarni@wdc.com>,
	linux-nvme@lists.infradead.org,
	Enzo Matsumiya <ematsumiya@suse.de>,
	Martin Wilck <mwilck@suse.com>
Subject: [PATCH 09/10] fabrics: fix some memory leaks
Date: Sat,  6 Mar 2021 01:36:23 +0100	[thread overview]
Message-ID: <20210306003624.21102-10-mwilck@suse.com> (raw)
In-Reply-To: <20210306003624.21102-1-mwilck@suse.com>

From: Martin Wilck <mwilck@suse.com>

None of these are critical for "nvme discover" or "nvme connect-all".
Still, silencing valgrind's error messages by fixing them gives some
peace of mind, and a longer-running program like the forthcomint
nvme monitor, leak checks are more important.

Use the previously introduced cleanup macros for this purpose.

Signed-off-by: Martin Wilck <mwilck@suse.com>
---
 fabrics.c | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/fabrics.c b/fabrics.c
index c965beb..f2ff511 100644
--- a/fabrics.c
+++ b/fabrics.c
@@ -49,6 +49,7 @@
 
 #include "common.h"
 #include "util/log.h"
+#include "util/cleanup.h"
 
 #ifdef HAVE_SYSTEMD
 #include <systemd/sd-id128.h>
@@ -309,7 +310,7 @@ static bool ctrl_matches_connectargs(const char *name, struct connect_args *args
 {
 	struct connect_args cargs;
 	bool found = false;
-	char *path, *addr;
+	char *path = NULL, *addr;
 	int ret;
 	bool persistent = true;
 
@@ -369,6 +370,8 @@ static bool ctrl_matches_connectargs(const char *name, struct connect_args *args
 	free(cargs.traddr);
 	free(cargs.trsvcid);
 	free(cargs.host_traddr);
+	free(addr);
+	free(path);
 
 	return found;
 }
@@ -425,13 +428,18 @@ static struct connect_args *extract_connect_args(char *argstr)
 	return cargs;
 }
 
-static void free_connect_args(struct connect_args *cargs)
+static void destruct_connect_args(struct connect_args *cargs)
 {
 	free(cargs->subsysnqn);
 	free(cargs->transport);
 	free(cargs->traddr);
 	free(cargs->trsvcid);
 	free(cargs->host_traddr);
+}
+
+static void free_connect_args(struct connect_args *cargs)
+{
+	destruct_connect_args(cargs);
 	free(cargs);
 }
 
@@ -1285,7 +1293,7 @@ retry:
 
 static bool cargs_match_found(struct nvmf_disc_rsp_page_entry *entry)
 {
-	struct connect_args cargs = {};
+	struct connect_args cargs __cleanup__(destruct_connect_args) = { NULL, };
 	struct connect_args *c = tracked_ctrls;
 
 	cargs.traddr = strdup(entry->traddr);
@@ -1371,9 +1379,11 @@ static void nvmf_get_host_identifiers(int ctrl_instance)
 	cfg.hostid = nvme_get_ctrl_attr(path, "hostid");
 }
 
+static DEFINE_CLEANUP_FUNC(cleanup_log, struct nvmf_disc_rsp_page_hdr *, free);
+
 static int do_discover(char *argstr, bool connect, enum nvme_print_flags flags)
 {
-	struct nvmf_disc_rsp_page_hdr *log = NULL;
+	struct nvmf_disc_rsp_page_hdr *log __cleanup__(cleanup_log) = NULL;
 	char *dev_name;
 	int instance, numrec = 0, ret, err;
 	int status = 0;
@@ -1457,7 +1467,7 @@ static int discover_from_conf_file(const char *desc, char *argstr,
 		const struct argconfig_commandline_options *opts, bool connect)
 {
 	FILE *f;
-	char line[256], *ptr, *args, **argv;
+	char line[256], *ptr, *all_args, *args, **argv;
 	int argc, err, ret = 0;
 
 	f = fopen(PATH_NVMF_DISC, "r");
@@ -1479,6 +1489,7 @@ static int discover_from_conf_file(const char *desc, char *argstr,
 			ret = -ENOMEM;
 			goto out;
 		}
+		all_args = args;
 
 		argv = calloc(MAX_DISC_ARGS, BUF_SIZE);
 		if (!argv) {
@@ -1522,7 +1533,7 @@ static int discover_from_conf_file(const char *desc, char *argstr,
 			ret = err;
 
 free_and_continue:
-		free(args);
+		free(all_args);
 		free(argv);
 	}
 
-- 
2.29.2


_______________________________________________
Linux-nvme mailing list
Linux-nvme@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-nvme

  parent reply	other threads:[~2021-03-06  0:39 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-06  0:36 [PATCH 00/10] Some minor fixes/additions for nvme-cli mwilck
2021-03-06  0:36 ` [PATCH 01/10] nvme-discover: lookup existing persistent controllers mwilck
2021-03-15 17:38   ` Sagi Grimberg
2021-03-15 17:43     ` Martin Wilck
2021-03-16  9:36     ` Hannes Reinecke
2021-03-06  0:36 ` [PATCH 02/10] nvme-discover: assume device given on command line is persistent mwilck
2021-03-15 17:41   ` Sagi Grimberg
2021-03-15 17:51     ` Martin Wilck
2021-03-06  0:36 ` [PATCH 03/10] do_discover: free cfg.device when resetting it mwilck
2021-03-06  0:36 ` [PATCH 04/10] nvme-connect-all(1): fix documentation for --quiet/-S mwilck
2021-03-08  7:12   ` Chaitanya Kulkarni
2021-03-15 17:44   ` Sagi Grimberg
2021-03-06  0:36 ` [PATCH 05/10] nvme: add some simplifying macros for __attribute__((cleanup())) mwilck
2021-03-08  7:10   ` Chaitanya Kulkarni
2021-03-15 17:44   ` Sagi Grimberg
2021-03-06  0:36 ` [PATCH 06/10] nvme-cli: add generic logging functionality mwilck
2021-03-08  7:15   ` Chaitanya Kulkarni
2021-03-08  7:17   ` Chaitanya Kulkarni
2021-03-15 17:45   ` Sagi Grimberg
2021-03-16  8:14     ` Martin Wilck
2021-03-06  0:36 ` [PATCH 07/10] nvme: convert some function arguments from "char *" to "const char *" mwilck
2021-03-08  7:13   ` Chaitanya Kulkarni
2021-03-15 17:46   ` Sagi Grimberg
2021-03-06  0:36 ` [PATCH 08/10] fabrics: use "const char *" in struct config mwilck
2021-03-08  7:08   ` Chaitanya Kulkarni
2021-03-15 17:46   ` Sagi Grimberg
2021-03-06  0:36 ` mwilck [this message]
2021-03-08  7:13   ` [PATCH 09/10] fabrics: fix some memory leaks Chaitanya Kulkarni
2021-03-15 17:46   ` Sagi Grimberg
2021-03-06  0:36 ` [PATCH 10/10] fabrics: fix invalid memory access in discover_from_conf_file() mwilck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210306003624.21102-10-mwilck@suse.com \
    --to=mwilck@suse.com \
    --cc=Chaitanya.Kulkarni@wdc.com \
    --cc=ematsumiya@suse.de \
    --cc=hare@suse.de \
    --cc=kbusch@kernel.org \
    --cc=linux-nvme@lists.infradead.org \
    --cc=sagi@grimberg.me \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).