[dpdk-dev,08/13] PMD/af_packet: guard against buffer overruns in RX path

Message ID d58e02294fd343fc6027dd595d06af1e6cd9781f.1481590851.git.mirq-linux@rere.qmqm.pl (mailing list archive)
State Superseded, archived
Headers

Checks

Context Check Description
ci/checkpatch warning coding style issues
ci/Intel compilation success Compilation OK

Commit Message

Michał Mirosław Dec. 13, 2016, 1:08 a.m. UTC
  Signed-off-by: Michał Mirosław <michal.miroslaw@atendesoftware.pl>
---
 drivers/net/af_packet/rte_eth_af_packet.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)
  

Comments

Ferruh Yigit Jan. 18, 2017, 11:48 a.m. UTC | #1
On 12/13/2016 1:08 AM, Michał Mirosław wrote:
> Signed-off-by: Michał Mirosław <michal.miroslaw@atendesoftware.pl>

Form main address (<mirq-linux@rere.qmqm.pl>) which sets git author
field, and Signed-off mail address are different.

As author, any objection to use signed-off mail:
"Michał Mirosław <michal.miroslaw@atendesoftware.pl>"

This is valid for a few other patches.
  
Michał Mirosław Jan. 18, 2017, 7:22 p.m. UTC | #2
On Wed, Jan 18, 2017 at 11:48:52AM +0000, Ferruh Yigit wrote:
> On 12/13/2016 1:08 AM, Michał Mirosław wrote:
> > Signed-off-by: Michał Mirosław <michal.miroslaw@atendesoftware.pl>
> Form main address (<mirq-linux@rere.qmqm.pl>) which sets git author
> field, and Signed-off mail address are different.
> 
> As author, any objection to use signed-off mail:
> "Michał Mirosław <michal.miroslaw@atendesoftware.pl>"
> 
> This is valid for a few other patches.

Please use the Signed-off address, thanks.

Best Regards,
Michał Mirosław
  

Patch

diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c
index ff45068..b1005c6 100644
--- a/drivers/net/af_packet/rte_eth_af_packet.c
+++ b/drivers/net/af_packet/rte_eth_af_packet.c
@@ -370,18 +370,18 @@  eth_rx_queue_setup(struct rte_eth_dev *dev,
 {
 	struct pmd_internals *internals = dev->data->dev_private;
 	struct pkt_rx_queue *pkt_q = &internals->rx_queue[rx_queue_id];
-	uint16_t buf_size;
+	unsigned buf_size, data_size;
 
 	pkt_q->mb_pool = mb_pool;
 
 	/* Now get the space available for data in the mbuf */
-	buf_size = (uint16_t)(rte_pktmbuf_data_room_size(pkt_q->mb_pool) -
-		RTE_PKTMBUF_HEADROOM);
+	buf_size = rte_pktmbuf_data_room_size(pkt_q->mb_pool) - RTE_PKTMBUF_HEADROOM;
+	data_size = internals->req.tp_frame_size - TPACKET2_HDRLEN + sizeof(struct sockaddr_ll);
 
-	if (ETH_FRAME_LEN > buf_size) {
+	if (data_size > buf_size) {
 		RTE_LOG(ERR, PMD,
 			"%s: %d bytes will not fit in mbuf (%d bytes)\n",
-			dev->data->name, ETH_FRAME_LEN, buf_size);
+			dev->data->name, data_size, buf_size);
 		return -ENOMEM;
 	}