From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <herakliusz.lipiec@intel.com>
Received: from mga01.intel.com (mga01.intel.com [192.55.52.88])
 by dpdk.org (Postfix) with ESMTP id 65AC5397D;
 Wed, 17 Apr 2019 16:41:55 +0200 (CEST)
X-Amp-Result: SKIPPED(no attachment in message)
X-Amp-File-Uploaded: False
Received: from orsmga008.jf.intel.com ([10.7.209.65])
 by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;
 17 Apr 2019 07:41:53 -0700
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.60,362,1549958400"; d="scan'208";a="135135756"
Received: from silpixa00399499.ir.intel.com (HELO
 silpixa00399499.ger.corp.intel.com) ([10.237.222.133])
 by orsmga008.jf.intel.com with ESMTP; 17 Apr 2019 07:41:52 -0700
From: Herakliusz Lipiec <herakliusz.lipiec@intel.com>
To: keith.wiles@intel.com
Cc: dev@dpdk.org, Herakliusz Lipiec <herakliusz.lipiec@intel.com>,
 rasland@mellanox.com, stable@dpdk.org
Date: Wed, 17 Apr 2019 15:42:45 +0100
Message-Id: <20190417144245.23353-1-herakliusz.lipiec@intel.com>
X-Mailer: git-send-email 2.17.2
Subject: [dpdk-dev] [PATCH 6/8] ipc: fix tap pmd memleak
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Wed, 17 Apr 2019 14:41:56 -0000

When sending multiple requests, rte_mp_request_sync
can succeed sending a few of those requests, but then
fail on a later one and in the end return with rc=-1.
The upper layers - e.g. device hotplug - currently
handles this case as if no messages were sent and no
memory for response buffers was allocated, which is
not true. Fixed by always freeing reply message buffers.

Fixes: c9aa56edec8e ("net/tap: access primary process queues from secondary")
Cc: rasland@mellanox.com
Cc: stable@dpdk.org
Signed-off-by: Herakliusz Lipiec <herakliusz.lipiec@intel.com>
---
 drivers/net/tap/rte_eth_tap.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
index e9fda8cf6..d70412d62 100644
--- a/drivers/net/tap/rte_eth_tap.c
+++ b/drivers/net/tap/rte_eth_tap.c
@@ -2104,6 +2104,7 @@ tap_mp_attach_queues(const char *port_name, struct rte_eth_dev *dev)
 	if (ret < 0) {
 		TAP_LOG(ERR, "Failed to request queues from primary: %d",
 			rte_errno);
+		free(replies.msgs);
 		return -1;
 	}
 	reply = &replies.msgs[0];
@@ -2119,6 +2120,7 @@ tap_mp_attach_queues(const char *port_name, struct rte_eth_dev *dev)
 	for (queue = 0; queue < reply_param->txq_count; queue++)
 		process_private->txq_fds[queue] = reply->fds[fd_iterator++];
 
+	free(replies.msgs);
 	return 0;
 }
 
-- 
2.17.2

From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from dpdk.org (dpdk.org [92.243.14.124])
	by dpdk.space (Postfix) with ESMTP id C6F5BA00E6
	for <public@inbox.dpdk.org>; Wed, 17 Apr 2019 16:41:57 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id 930181B6E2;
	Wed, 17 Apr 2019 16:41:57 +0200 (CEST)
Received: from mga01.intel.com (mga01.intel.com [192.55.52.88])
 by dpdk.org (Postfix) with ESMTP id 65AC5397D;
 Wed, 17 Apr 2019 16:41:55 +0200 (CEST)
X-Amp-Result: SKIPPED(no attachment in message)
X-Amp-File-Uploaded: False
Received: from orsmga008.jf.intel.com ([10.7.209.65])
 by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;
 17 Apr 2019 07:41:53 -0700
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.60,362,1549958400"; d="scan'208";a="135135756"
Received: from silpixa00399499.ir.intel.com (HELO
 silpixa00399499.ger.corp.intel.com) ([10.237.222.133])
 by orsmga008.jf.intel.com with ESMTP; 17 Apr 2019 07:41:52 -0700
From: Herakliusz Lipiec <herakliusz.lipiec@intel.com>
To: keith.wiles@intel.com
Cc: dev@dpdk.org, Herakliusz Lipiec <herakliusz.lipiec@intel.com>,
 rasland@mellanox.com, stable@dpdk.org
Date: Wed, 17 Apr 2019 15:42:45 +0100
Message-Id: <20190417144245.23353-1-herakliusz.lipiec@intel.com>
X-Mailer: git-send-email 2.17.2
Subject: [dpdk-dev] [PATCH 6/8] ipc: fix tap pmd memleak
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>
Content-Type: text/plain; charset="UTF-8"
Message-ID: <20190417144245.1txqpDae1pkpjtPeUU7sYfjr8wsVu78m_7cQ4mKFWS4@z>

When sending multiple requests, rte_mp_request_sync
can succeed sending a few of those requests, but then
fail on a later one and in the end return with rc=-1.
The upper layers - e.g. device hotplug - currently
handles this case as if no messages were sent and no
memory for response buffers was allocated, which is
not true. Fixed by always freeing reply message buffers.

Fixes: c9aa56edec8e ("net/tap: access primary process queues from secondary")
Cc: rasland@mellanox.com
Cc: stable@dpdk.org
Signed-off-by: Herakliusz Lipiec <herakliusz.lipiec@intel.com>
---
 drivers/net/tap/rte_eth_tap.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
index e9fda8cf6..d70412d62 100644
--- a/drivers/net/tap/rte_eth_tap.c
+++ b/drivers/net/tap/rte_eth_tap.c
@@ -2104,6 +2104,7 @@ tap_mp_attach_queues(const char *port_name, struct rte_eth_dev *dev)
 	if (ret < 0) {
 		TAP_LOG(ERR, "Failed to request queues from primary: %d",
 			rte_errno);
+		free(replies.msgs);
 		return -1;
 	}
 	reply = &replies.msgs[0];
@@ -2119,6 +2120,7 @@ tap_mp_attach_queues(const char *port_name, struct rte_eth_dev *dev)
 	for (queue = 0; queue < reply_param->txq_count; queue++)
 		process_private->txq_fds[queue] = reply->fds[fd_iterator++];
 
+	free(replies.msgs);
 	return 0;
 }
 
-- 
2.17.2