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