* [dpdk-dev] [PATCH 1/3] net/af_packet: fix check of file descriptors
2020-07-06 12:26 [dpdk-dev] [PATCH 0/3] fixes for af_packet driver wangyunjian
@ 2020-07-06 12:27 ` wangyunjian
2020-07-06 12:27 ` [dpdk-dev] [PATCH 2/3] net/af_packet: fix mem leak on init failure wangyunjian
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: wangyunjian @ 2020-07-06 12:27 UTC (permalink / raw)
To: dev; +Cc: linville, jerry.lilijun, xudingke, Yunjian Wang, stable
From: Yunjian Wang <wangyunjian@huawei.com>
Zero is a valid fd. It will fail to check the fd if the fd is zero.
Fixes: 527740ccfaec ("af_packet: fix some leaks")
Cc: stable@dpdk.org
Signed-off-by: Yunjian Wang <wangyunjian@huawei.com>
---
drivers/net/af_packet/rte_eth_af_packet.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c
index 22feb72..361b5d5 100644
--- a/drivers/net/af_packet/rte_eth_af_packet.c
+++ b/drivers/net/af_packet/rte_eth_af_packet.c
@@ -645,6 +645,8 @@ struct pmd_internals {
for (q = 0; q < nb_queues; q++) {
(*internals)->rx_queue[q].map = MAP_FAILED;
(*internals)->tx_queue[q].map = MAP_FAILED;
+ (*internals)->rx_queue[q].sockfd = -1;
+ (*internals)->tx_queue[q].sockfd = -1;
}
req = &((*internals)->req);
@@ -848,7 +850,7 @@ struct pmd_internals {
rte_free((*internals)->rx_queue[q].rd);
rte_free((*internals)->tx_queue[q].rd);
- if (((*internals)->rx_queue[q].sockfd != 0) &&
+ if (((*internals)->rx_queue[q].sockfd >= 0) &&
((*internals)->rx_queue[q].sockfd != qsockfd))
close((*internals)->rx_queue[q].sockfd);
}
--
1.8.3.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [dpdk-dev] [PATCH 2/3] net/af_packet: fix mem leak on init failure
2020-07-06 12:26 [dpdk-dev] [PATCH 0/3] fixes for af_packet driver wangyunjian
2020-07-06 12:27 ` [dpdk-dev] [PATCH 1/3] net/af_packet: fix check of file descriptors wangyunjian
@ 2020-07-06 12:27 ` wangyunjian
2020-07-06 12:28 ` [dpdk-dev] [PATCH 3/3] net/af_packet: fix wrong munmap " wangyunjian
2020-07-14 14:58 ` [dpdk-dev] [PATCH 0/3] fixes for af_packet driver Ferruh Yigit
3 siblings, 0 replies; 5+ messages in thread
From: wangyunjian @ 2020-07-06 12:27 UTC (permalink / raw)
To: dev; +Cc: linville, jerry.lilijun, xudingke, Yunjian Wang, stable
From: Yunjian Wang <wangyunjian@huawei.com>
Add missing code to free memory when the device initialization fails.
Fixes: ccd37d341e8d ("net/af_packet: remove queue number limitation")
Fixes: 5f19dee604ed ("drivers/net: do not use private ethdev data")
Cc: stable@dpdk.org
Signed-off-by: Yunjian Wang <wangyunjian@huawei.com>
---
drivers/net/af_packet/rte_eth_af_packet.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c
index 361b5d5..be3fabb 100644
--- a/drivers/net/af_packet/rte_eth_af_packet.c
+++ b/drivers/net/af_packet/rte_eth_af_packet.c
@@ -637,9 +637,7 @@ struct pmd_internals {
sizeof(struct pkt_tx_queue),
0, numa_node);
if (!(*internals)->rx_queue || !(*internals)->tx_queue) {
- rte_free((*internals)->rx_queue);
- rte_free((*internals)->tx_queue);
- return -1;
+ goto free_internals;
}
for (q = 0; q < nb_queues; q++) {
@@ -664,20 +662,20 @@ struct pmd_internals {
PMD_LOG(ERR,
"%s: I/F name too long (%s)",
name, pair->value);
- return -1;
+ goto free_internals;
}
if (ioctl(sockfd, SIOCGIFINDEX, &ifr) == -1) {
PMD_LOG_ERRNO(ERR, "%s: ioctl failed (SIOCGIFINDEX)", name);
- return -1;
+ goto free_internals;
}
(*internals)->if_name = strdup(pair->value);
if ((*internals)->if_name == NULL)
- return -1;
+ goto free_internals;
(*internals)->if_index = ifr.ifr_ifindex;
if (ioctl(sockfd, SIOCGIFHWADDR, &ifr) == -1) {
PMD_LOG_ERRNO(ERR, "%s: ioctl failed (SIOCGIFHWADDR)", name);
- return -1;
+ goto free_internals;
}
memcpy(&(*internals)->eth_addr, ifr.ifr_hwaddr.sa_data, ETH_ALEN);
@@ -701,7 +699,7 @@ struct pmd_internals {
PMD_LOG_ERRNO(ERR,
"%s: could not open AF_PACKET socket",
name);
- return -1;
+ goto error;
}
tpver = TPACKET_V2;
@@ -854,6 +852,9 @@ struct pmd_internals {
((*internals)->rx_queue[q].sockfd != qsockfd))
close((*internals)->rx_queue[q].sockfd);
}
+free_internals:
+ rte_free((*internals)->rx_queue);
+ rte_free((*internals)->tx_queue);
free((*internals)->if_name);
rte_free(*internals);
return -1;
--
1.8.3.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [dpdk-dev] [PATCH 3/3] net/af_packet: fix wrong munmap on init failure
2020-07-06 12:26 [dpdk-dev] [PATCH 0/3] fixes for af_packet driver wangyunjian
2020-07-06 12:27 ` [dpdk-dev] [PATCH 1/3] net/af_packet: fix check of file descriptors wangyunjian
2020-07-06 12:27 ` [dpdk-dev] [PATCH 2/3] net/af_packet: fix mem leak on init failure wangyunjian
@ 2020-07-06 12:28 ` wangyunjian
2020-07-14 14:58 ` [dpdk-dev] [PATCH 0/3] fixes for af_packet driver Ferruh Yigit
3 siblings, 0 replies; 5+ messages in thread
From: wangyunjian @ 2020-07-06 12:28 UTC (permalink / raw)
To: dev; +Cc: linville, jerry.lilijun, xudingke, Yunjian Wang, stable
From: Yunjian Wang <wangyunjian@huawei.com>
Add a missing available check and fix the wrong address passed
to munmap on init failure.
Fixes: dd6590fe2fd7 ("af_packet: fix possible memory leak")
Cc: stable@dpdk.org
Signed-off-by: Yunjian Wang <wangyunjian@huawei.com>
---
drivers/net/af_packet/rte_eth_af_packet.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c
index be3fabb..4d2e1f6 100644
--- a/drivers/net/af_packet/rte_eth_af_packet.c
+++ b/drivers/net/af_packet/rte_eth_af_packet.c
@@ -843,8 +843,9 @@ struct pmd_internals {
if (qsockfd != -1)
close(qsockfd);
for (q = 0; q < nb_queues; q++) {
- munmap((*internals)->rx_queue[q].map,
- 2 * req->tp_block_size * req->tp_block_nr);
+ if ((*internals)->rx_queue[q].map != MAP_FAILED)
+ munmap((*internals)->rx_queue[q].map,
+ 2 * req->tp_block_size * req->tp_block_nr);
rte_free((*internals)->rx_queue[q].rd);
rte_free((*internals)->tx_queue[q].rd);
--
1.8.3.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [dpdk-dev] [PATCH 0/3] fixes for af_packet driver
2020-07-06 12:26 [dpdk-dev] [PATCH 0/3] fixes for af_packet driver wangyunjian
` (2 preceding siblings ...)
2020-07-06 12:28 ` [dpdk-dev] [PATCH 3/3] net/af_packet: fix wrong munmap " wangyunjian
@ 2020-07-14 14:58 ` Ferruh Yigit
3 siblings, 0 replies; 5+ messages in thread
From: Ferruh Yigit @ 2020-07-14 14:58 UTC (permalink / raw)
To: wangyunjian, dev; +Cc: linville, jerry.lilijun, xudingke
On 7/6/2020 1:26 PM, wangyunjian wrote:
> From: Yunjian Wang <wangyunjian@huawei.com>
>
> This series include three fixes patches for af_packet driver.
>
> Yunjian Wang (3):
> net/af_packet: fix check of file descriptors
> net/af_packet: fix mem leak on init failure
> net/af_packet: fix wrong munmap on init failure
>
For series,
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
Series applied to dpdk-next-net/master, thanks.
^ permalink raw reply [flat|nested] 5+ messages in thread