DPDK patches and discussions
 help / color / mirror / Atom feed
From: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
To: dev@dpdk.org
Cc: thomas@monjalon.net,
	Darek Stojaczyk <dariusz.stojaczyk@intel.com>,
	qi.z.zhang@intel.com
Subject: [dpdk-dev] [PATCH] dev: fix devargs memleak on IPC detach request
Date: Fri, 23 Nov 2018 15:11:07 +0100	[thread overview]
Message-ID: <20181123141107.86553-1-dariusz.stojaczyk@intel.com> (raw)

Device detach triggered through IPC leaked some memory.
It allocated a devargs objects just to use it for
parsing the devargs string in order to retrieve the
device name. Those devargs weren't passed anywhere
and were never freed.

First of all, let's put those devargs on the stack,
so they doesn't need to be freed. Then free the
additional arguments string as soon as it's allocated,
because we won't need it.

Fixes: ac9e4a17370f ("eal: support attach/detach shared device from secondary")
Cc: qi.z.zhang@intel.com

Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
---
 lib/librte_eal/common/hotplug_mp.c | 20 ++++++++------------
 1 file changed, 8 insertions(+), 12 deletions(-)

diff --git a/lib/librte_eal/common/hotplug_mp.c b/lib/librte_eal/common/hotplug_mp.c
index 7c9fcc46c..0a822e4c7 100644
--- a/lib/librte_eal/common/hotplug_mp.c
+++ b/lib/librte_eal/common/hotplug_mp.c
@@ -87,7 +87,7 @@ __handle_secondary_request(void *param)
 	const struct eal_dev_mp_req *req =
 		(const struct eal_dev_mp_req *)msg->param;
 	struct eal_dev_mp_req tmp_req;
-	struct rte_devargs *da;
+	struct rte_devargs da;
 	struct rte_device *dev;
 	struct rte_bus *bus;
 	int ret = 0;
@@ -114,15 +114,11 @@ __handle_secondary_request(void *param)
 				goto rollback;
 		}
 	} else if (req->t == EAL_DEV_REQ_TYPE_DETACH) {
-		da = calloc(1, sizeof(*da));
-		if (da == NULL) {
-			ret = -ENOMEM;
-			goto finish;
-		}
-
-		ret = rte_devargs_parse(da, req->devargs);
+		ret = rte_devargs_parse(&da, req->devargs);
 		if (ret != 0)
 			goto finish;
+		free(da.args); /* we don't need those */
+		da.args = NULL;
 
 		ret = eal_dev_hotplug_request_to_secondary(&tmp_req);
 		if (ret != 0) {
@@ -131,16 +127,16 @@ __handle_secondary_request(void *param)
 			goto rollback;
 		}
 
-		bus = rte_bus_find_by_name(da->bus->name);
+		bus = rte_bus_find_by_name(da.bus->name);
 		if (bus == NULL) {
-			RTE_LOG(ERR, EAL, "Cannot find bus (%s)\n", da->bus->name);
+			RTE_LOG(ERR, EAL, "Cannot find bus (%s)\n", da.bus->name);
 			ret = -ENOENT;
 			goto finish;
 		}
 
-		dev = bus->find_device(NULL, cmp_dev_name, da->name);
+		dev = bus->find_device(NULL, cmp_dev_name, da.name);
 		if (dev == NULL) {
-			RTE_LOG(ERR, EAL, "Cannot find plugged device (%s)\n", da->name);
+			RTE_LOG(ERR, EAL, "Cannot find plugged device (%s)\n", da.name);
 			ret = -ENOENT;
 			goto finish;
 		}
-- 
2.17.1

             reply	other threads:[~2018-11-23 14:24 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-23 14:11 Darek Stojaczyk [this message]
2018-11-23 19:17 ` Zhang, Qi Z
2018-11-25 12:33   ` Thomas Monjalon

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=20181123141107.86553-1-dariusz.stojaczyk@intel.com \
    --to=dariusz.stojaczyk@intel.com \
    --cc=dev@dpdk.org \
    --cc=qi.z.zhang@intel.com \
    --cc=thomas@monjalon.net \
    /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).