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: Wed, 18 Dec 2019 11:02:39 -0500 From: Willem de Bruijn <willemdebruijn.kernel@...il.com> To: Steffen Klassert <steffen.klassert@...unet.com> Cc: David Miller <davem@...emloft.net>, Paolo Abeni <pabeni@...hat.com>, Subash Abhinov Kasiviswanathan <subashab@...eaurora.org>, Marcelo Ricardo Leitner <marcelo.leitner@...il.com>, Network Development <netdev@...r.kernel.org> Subject: Re: [PATCH net-next 3/4] net: Support GRO/GSO fraglist chaining. On Wed, Dec 18, 2019 at 8:35 AM Steffen Klassert <steffen.klassert@...unet.com> wrote: > > This patch adds the core functions to chain/unchain > GSO skbs at the frag_list pointer. This also adds > a new GSO type SKB_GSO_FRAGLIST and a is_flist > flag to napi_gro_cb which indicates that this > flow will be GROed by fraglist chaining. > > Signed-off-by: Steffen Klassert <steffen.klassert@...unet.com> > +struct sk_buff *skb_segment_list(struct sk_buff *skb, > + netdev_features_t features, > + unsigned int offset) > +{ > + struct sk_buff *list_skb = skb_shinfo(skb)->frag_list; > + unsigned int tnl_hlen = skb_tnl_header_len(skb); > + unsigned int delta_truesize = 0; > + unsigned int delta_len = 0; > + struct sk_buff *tail = NULL; > + struct sk_buff *nskb; > + > + skb_push(skb, -skb_network_offset(skb) + offset); > + > + skb_shinfo(skb)->frag_list = NULL; > + > + do { > + nskb = list_skb; > + list_skb = list_skb->next; > + > + if (!tail) > + skb->next = nskb; > + else > + tail->next = nskb; > + > + tail = nskb; > + > + delta_len += nskb->len; > + delta_truesize += nskb->truesize; > + > + skb_push(nskb, -skb_network_offset(nskb) + offset); > + > + if (!secpath_exists(nskb)) > + __skb_ext_copy(nskb, skb); Of all the possible extensions, why is this only relevant to secpath? More in general, this function open codes a variety of skb fields that carry over from skb to nskb. How did you select this subset of fields? > + > + memcpy(nskb->cb, skb->cb, sizeof(skb->cb)); > + > + nskb->tstamp = skb->tstamp; > + nskb->dev = skb->dev; > + nskb->queue_mapping = skb->queue_mapping; > + > + nskb->mac_len = skb->mac_len; > + nskb->mac_header = skb->mac_header; > + nskb->transport_header = skb->transport_header; > + nskb->network_header = skb->network_header; > + skb_dst_copy(nskb, skb); > + > + skb_headers_offset_update(nskb, skb_headroom(nskb) - skb_headroom(skb)); > + skb_copy_from_linear_data_offset(skb, -tnl_hlen, > + nskb->data - tnl_hlen, > + offset + tnl_hlen); > + > + if (skb_needs_linearize(nskb, features) && > + __skb_linearize(nskb)) > + goto err_linearize; > + > + } while (list_skb); > + > + skb->truesize = skb->truesize - delta_truesize; > + skb->data_len = skb->data_len - delta_len; > + skb->len = skb->len - delta_len; > + skb->ip_summed = nskb->ip_summed; > + skb->csum_level = nskb->csum_level; This changed from the previous version, where nskb inherited ip_summed and csum_level from skb. Why is that?
Powered by blists - more mailing lists