[dpdk-dev] [PATCH v2 08/13] PMD/af_packet: guard against buffer overruns in RX path
John W. Linville
linville at tuxdriver.com
Tue Dec 13 17:05:51 CET 2016
On Tue, Dec 13, 2016 at 02:28:34AM +0100, Michał Mirosław wrote:
>
> Signed-off-by: Michał Mirosław <michal.miroslaw at atendesoftware.pl>
Acked-by: John W. Linville <linville at tuxdriver.com>
> ---
> drivers/net/af_packet/rte_eth_af_packet.c | 11 ++++++-----
> 1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/net/af_packet/rte_eth_af_packet.c b/drivers/net/af_packet/rte_eth_af_packet.c
> index ff45068..5599e02 100644
> --- a/drivers/net/af_packet/rte_eth_af_packet.c
> +++ b/drivers/net/af_packet/rte_eth_af_packet.c
> @@ -370,18 +370,19 @@ 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 int 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;
> + data_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;
> }
>
> --
> 2.10.2
>
>
--
John W. Linville Someday the world will need a hero, and you
linville at tuxdriver.com might be all we have. Be ready.
More information about the dev
mailing list