DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH] net/tap: fix potential buffer overrun
@ 2019-04-25 16:47 Herakliusz Lipiec
  2019-04-25 16:47 ` Herakliusz Lipiec
                   ` (2 more replies)
  0 siblings, 3 replies; 20+ messages in thread
From: Herakliusz Lipiec @ 2019-04-25 16:47 UTC (permalink / raw)
  To: Keith Wiles; +Cc: dev, Herakliusz Lipiec, rasland, stable

When secondary to primary process synchronization occours
there is no check for number of fds which could cause buffer overrun.

Bugzilla ID: 252
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 | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
index e9fda8cf6..b985b1c84 100644
--- a/drivers/net/tap/rte_eth_tap.c
+++ b/drivers/net/tap/rte_eth_tap.c
@@ -2111,6 +2111,10 @@ tap_mp_attach_queues(const char *port_name, struct rte_eth_dev *dev)
 	TAP_LOG(DEBUG, "Received IPC reply for %s", reply_param->port_name);
 
 	/* Attach the queues from received file descriptors */
+	if (reply_param->rxq_count + reply_param->txq_count != reply->num_fds){
+		TAP_LOG(ERR, "Unexpected number of fds received");
+		return -1;
+	}
 	dev->data->nb_rx_queues = reply_param->rxq_count;
 	dev->data->nb_tx_queues = reply_param->txq_count;
 	fd_iterator = 0;
@@ -2151,12 +2155,16 @@ tap_mp_sync_queues(const struct rte_mp_msg *request, const void *peer)
 	/* Fill file descriptors for all queues */
 	reply.num_fds = 0;
 	reply_param->rxq_count = 0;
+	if (dev->data->nb_rx_queues + dev->data->nb_tx_queues >
+			RTE_MP_MAX_FD_NUM){
+		TAP_LOG(ERR, "Number of rx/tx queues exceeds max number of fds");
+		return -1;
+	}
 	for (queue = 0; queue < dev->data->nb_rx_queues; queue++) {
 		reply.fds[reply.num_fds++] = process_private->rxq_fds[queue];
 		reply_param->rxq_count++;
 	}
 	RTE_ASSERT(reply_param->rxq_count == dev->data->nb_rx_queues);
-	RTE_ASSERT(reply_param->txq_count == dev->data->nb_tx_queues);
 	RTE_ASSERT(reply.num_fds <= RTE_MP_MAX_FD_NUM);
 
 	reply_param->txq_count = 0;
@@ -2164,7 +2172,8 @@ tap_mp_sync_queues(const struct rte_mp_msg *request, const void *peer)
 		reply.fds[reply.num_fds++] = process_private->txq_fds[queue];
 		reply_param->txq_count++;
 	}
-
+	RTE_ASSERT(reply_param->txq_count == dev->data->nb_tx_queues);
+	RTE_ASSERT(reply.num_fds <= RTE_MP_MAX_FD_NUM);
 	/* Send reply */
 	strlcpy(reply.name, request->name, sizeof(reply.name));
 	strlcpy(reply_param->port_name, request_param->port_name,
-- 
2.17.2

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2019-05-02 16:32 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-25 16:47 [dpdk-dev] [PATCH] net/tap: fix potential buffer overrun Herakliusz Lipiec
2019-04-25 16:47 ` Herakliusz Lipiec
2019-04-25 17:17 ` [dpdk-dev] [PATCH v2] " Herakliusz Lipiec
2019-04-25 17:17   ` Herakliusz Lipiec
2019-04-29 13:32   ` Burakov, Anatoly
2019-04-29 13:32     ` Burakov, Anatoly
2019-04-29 13:53   ` Ferruh Yigit
2019-04-29 13:53     ` Ferruh Yigit
2019-04-29 14:02     ` Burakov, Anatoly
2019-04-29 14:02       ` Burakov, Anatoly
2019-04-30 10:42       ` Ferruh Yigit
2019-04-30 10:42         ` Ferruh Yigit
2019-04-29 13:58   ` Wiles, Keith
2019-04-29 13:58     ` Wiles, Keith
2019-04-29 14:05     ` Burakov, Anatoly
2019-04-29 14:05       ` Burakov, Anatoly
2019-04-29 17:31 ` [dpdk-dev] [PATCH v3] " Herakliusz Lipiec
2019-04-29 17:31   ` Herakliusz Lipiec
2019-05-02 16:31   ` [dpdk-dev] [dpdk-stable] " Ferruh Yigit
2019-05-02 16:31     ` Ferruh Yigit

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).