diff --git a/net/core/skbuff.c b/net/core/skbuff.c index b157efea5dea88745f9a2ae547d39fdf7e622627..c2bfd92eb833b568a7a03f81398437fe25be7e76 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -4448,6 +4448,7 @@ struct sk_buff *skb_segment(struct sk_buff *head_skb, unsigned int doffset = head_skb->data - skb_mac_header(head_skb); unsigned int offset = doffset; unsigned int tnl_hlen = skb_tnl_header_len(head_skb); + bool gso_by_frags = (mss == GSO_BY_FRAGS); unsigned int partial_segs = 0; unsigned int headroom; unsigned int len = head_skb->len; @@ -4460,7 +4461,7 @@ struct sk_buff *skb_segment(struct sk_buff *head_skb, int nfrags, pos; if ((skb_shinfo(head_skb)->gso_type & SKB_GSO_DODGY) && - mss != GSO_BY_FRAGS && mss != skb_headlen(head_skb)) { + !gso_by_frags && mss != skb_headlen(head_skb)) { struct sk_buff *check_skb; for (check_skb = list_skb; check_skb; check_skb = check_skb->next) { @@ -4488,7 +4489,7 @@ struct sk_buff *skb_segment(struct sk_buff *head_skb, sg = !!(features & NETIF_F_SG); csum = !!can_checksum_protocol(features, proto); - if (sg && csum && (mss != GSO_BY_FRAGS)) { + if (sg && csum && !gso_by_frags) { if (!(features & NETIF_F_GSO_PARTIAL)) { struct sk_buff *iter; unsigned int frag_len; @@ -4547,7 +4548,7 @@ struct sk_buff *skb_segment(struct sk_buff *head_skb, int hsize; int size; - if (unlikely(mss == GSO_BY_FRAGS)) { + if (unlikely(gso_by_frags)) { len = list_skb->len; } else { len = head_skb->len - offset;