DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Hu, Jiayu" <jiayu.hu@intel.com>
To: Kumara Parameshwaran <kumaraparamesh92@gmail.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>, "stable@dpdk.org" <stable@dpdk.org>
Subject: RE: [PATCH v2] gro : check for payload length after the trim
Date: Tue, 18 Oct 2022 08:21:09 +0000	[thread overview]
Message-ID: <CY5PR11MB6487F8920A8BE3542B8E564D92289@CY5PR11MB6487.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20221016144305.19249-1-kumaraparmesh92@gmail.com>



> -----Original Message-----
> From: Kumara Parameshwaran <kumaraparamesh92@gmail.com>
> Sent: Sunday, October 16, 2022 10:43 PM
> To: Hu, Jiayu <jiayu.hu@intel.com>
> Cc: dev@dpdk.org; Kumara Parameshwaran
> <kumaraparamesh92@gmail.com>; stable@dpdk.org
> Subject: [PATCH v2] gro : check for payload length after the trim
> 
> From: Kumara Parameshwaran <kumaraparamesh92@gmail.com>
> 
> When packet is padded with extra bytes the the validation of the payload
> length should be done after the trim operation
> 
> Fixes: b8a55871d5af ("gro: trim tail padding bytes")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Kumara Parameshwaran <kumaraparamesh92@gmail.com>
> ---
> v1:
> 	If there is padding to the ethernet frame cases where timestamp is
> disabled
> 	the packet length should be validated with the total ip length as
> packet length
> 	is used in the GRO merging logic
> 
> v2:
> 	Trim the packet length and then check for the protocol payload
> validation  lib/gro/gro_tcp4.c | 11 ++++++-----  lib/gro/gro_udp4.c | 10
> +++++-----
>  2 files changed, 11 insertions(+), 10 deletions(-)
> 
> diff --git a/lib/gro/gro_tcp4.c b/lib/gro/gro_tcp4.c index
> 8f5e800250..0014096e63 100644
> --- a/lib/gro/gro_tcp4.c
> +++ b/lib/gro/gro_tcp4.c
> @@ -225,6 +225,12 @@ gro_tcp4_reassemble(struct rte_mbuf *pkt,
>  	 */
>  	if (tcp_hdr->tcp_flags != RTE_TCP_ACK_FLAG)
>  		return -1;
> +
> +	/* trim the tail padding bytes */
> +	ip_tlen = rte_be_to_cpu_16(ipv4_hdr->total_length);
> +	if (pkt->pkt_len > (uint32_t)(ip_tlen + pkt->l2_len))
> +		rte_pktmbuf_trim(pkt, pkt->pkt_len - ip_tlen - pkt->l2_len);
> +
>  	/*
>  	 * Don't process the packet whose payload length is less than or
>  	 * equal to 0.
> @@ -233,11 +239,6 @@ gro_tcp4_reassemble(struct rte_mbuf *pkt,
>  	if (tcp_dl <= 0)
>  		return -1;
> 
> -	/* trim the tail padding bytes */
> -	ip_tlen = rte_be_to_cpu_16(ipv4_hdr->total_length);
> -	if (pkt->pkt_len > (uint32_t)(ip_tlen + pkt->l2_len))
> -		rte_pktmbuf_trim(pkt, pkt->pkt_len - ip_tlen - pkt->l2_len);
> -
>  	/*
>  	 * Save IPv4 ID for the packet whose DF bit is 0. For the packet
>  	 * whose DF bit is 1, IPv4 ID is ignored.
> diff --git a/lib/gro/gro_udp4.c b/lib/gro/gro_udp4.c index
> 839f9748b7..42596d33b6 100644
> --- a/lib/gro/gro_udp4.c
> +++ b/lib/gro/gro_udp4.c
> @@ -220,6 +220,11 @@ gro_udp4_reassemble(struct rte_mbuf *pkt,
>  	if (!is_ipv4_fragment(ipv4_hdr))
>  		return -1;
> 
> +	ip_dl = rte_be_to_cpu_16(ipv4_hdr->total_length);
> +	/* trim the tail padding bytes */
> +	if (pkt->pkt_len > (uint32_t)(ip_dl + pkt->l2_len))
> +		rte_pktmbuf_trim(pkt, pkt->pkt_len - ip_dl - pkt->l2_len);
> +
>  	/*
>  	 * Don't process the packet whose payload length is less than or
>  	 * equal to 0.
> @@ -227,14 +232,9 @@ gro_udp4_reassemble(struct rte_mbuf *pkt,
>  	if (pkt->pkt_len <= hdr_len)
>  		return -1;
> 
> -	ip_dl = rte_be_to_cpu_16(ipv4_hdr->total_length);
>  	if (ip_dl <= pkt->l3_len)
>  		return -1;
> 
> -	/* trim the tail padding bytes */
> -	if (pkt->pkt_len > (uint32_t)(ip_dl + pkt->l2_len))
> -		rte_pktmbuf_trim(pkt, pkt->pkt_len - ip_dl - pkt->l2_len);
> -
>  	ip_dl -= pkt->l3_len;
>  	ip_id = rte_be_to_cpu_16(ipv4_hdr->packet_id);
>  	frag_offset = rte_be_to_cpu_16(ipv4_hdr->fragment_offset);
> --
> 2.25.1

Acked-by: Jiayu Hu <Jiayu.hu@intel.com>

Thanks,
Jiayu


  reply	other threads:[~2022-10-18  8:21 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-10 17:51 [PATCH] gro : fix pkt length when extra bytes are padded to ethernet frame Kumara Parameshwaran
2022-10-10 19:32 ` David Marchand
     [not found]   ` <CANxNyasJ7RWk6S9hArfKc=m39huCOgab92sV4DjxDh0VENLf7Q@mail.gmail.com>
2022-10-11  5:47     ` Fwd: " kumaraparameshwaran rathinavel
2022-10-12  1:34       ` Jun Qiu
2022-10-12  7:48         ` kumaraparameshwaran rathinavel
2022-10-12  7:50           ` David Marchand
2022-10-16  7:01         ` Hu, Jiayu
2022-10-17 13:27           ` kumaraparameshwaran rathinavel
2023-10-31 18:49             ` Stephen Hemminger
2022-10-16 14:43 ` [PATCH v2] gro : check for payload length after the trim Kumara Parameshwaran
2022-10-18  8:21   ` Hu, Jiayu [this message]
2022-10-26 15:23     ` Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CY5PR11MB6487F8920A8BE3542B8E564D92289@CY5PR11MB6487.namprd11.prod.outlook.com \
    --to=jiayu.hu@intel.com \
    --cc=dev@dpdk.org \
    --cc=kumaraparamesh92@gmail.com \
    --cc=stable@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).