lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Mon, 16 Jul 2012 07:02:25 -0700
From:	<Padmanabh.Ratnakar@...lex.Com>
To:	<eric.dumazet@...il.com>
CC:	<netdev@...r.kernel.org>, <Sathya.Perla@...lex.Com>
Subject: RE: [PATCH net-next] be2net: dont pull too much data in skb linear
 part



> -----Original Message-----
> From: Eric Dumazet [mailto:eric.dumazet@...il.com]
> Sent: Friday, July 13, 2012 6:50 PM
> To: Ratnakar, Padmanabh
> Cc: netdev
> Subject: [PATCH net-next] be2net: dont pull too much data in skb linear part
> 
> From: Eric Dumazet <edumazet@...gle.com>
> 
> skb_fill_rx_data() pulls 64 byte of data in skb->data
> 
> Its too much for TCP (with no options) on IPv4, as total size of headers is 14 +
> 40 = 54
> 
> This means tcp stack and splice() are suboptimal, since tcp payload is in part in
> tcp->data, and in part in skb frag.
> 
> Signed-off-by: Eric Dumazet <edumazet@...gle.com>
> ---
>  drivers/net/ethernet/emulex/benet/be_main.c |    6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/ethernet/emulex/benet/be_main.c
> b/drivers/net/ethernet/emulex/benet/be_main.c
> index 7e989d0..f18375c 100644
> --- a/drivers/net/ethernet/emulex/benet/be_main.c
> +++ b/drivers/net/ethernet/emulex/benet/be_main.c
> @@ -1228,16 +1228,16 @@ static void skb_fill_rx_data(struct be_rx_obj
> *rxo, struct sk_buff *skb,
>  	/* Copy data in the first descriptor of this completion */
>  	curr_frag_len = min(rxcp->pkt_size, rx_frag_size);
> 
> -	/* Copy the header portion into skb_data */
> -	hdr_len = min(BE_HDR_LEN, curr_frag_len);
> -	memcpy(skb->data, start, hdr_len);
>  	skb->len = curr_frag_len;
>  	if (curr_frag_len <= BE_HDR_LEN) { /* tiny packet */
> +		memcpy(skb->data, start, curr_frag_len);
>  		/* Complete packet has now been moved to data */
>  		put_page(page_info->page);
>  		skb->data_len = 0;
>  		skb->tail += curr_frag_len;
>  	} else {
> +		hdr_len = ETH_HLEN;
> +		memcpy(skb->data, start, hdr_len);
>  		skb_shinfo(skb)->nr_frags = 1;
>  		skb_frag_set_page(skb, 0, page_info->page);
>  		skb_shinfo(skb)->frags[0].page_offset =
> 
Change looks good to me. I tested this and it is working.
Thanks
Acked-by: Padmanabh Ratnakar <padmanabh.ratnakar@...lex.com>


Powered by blists - more mailing lists