From: David S. Miller Date: Fri, 26 Jun 2020 02:29:51 +0000 (-0700) Subject: Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net X-Git-Tag: v5.9-rc1~133^2~415 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7bed14551659875e1cd23a7c0266394a29a773b3;p=thirdparty%2Fkernel%2Fstable.git Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net Minor overlapping changes in xfrm_device.c, between the double ESP trailing bug fix setting the XFRM_INIT flag and the changes in net-next preparing for bonding encryption support. Signed-off-by: David S. Miller --- 7bed14551659875e1cd23a7c0266394a29a773b3 diff --cc net/xfrm/xfrm_device.c index 7b64bb64c8222,626096bd0d294..edf11893dbe81 --- a/net/xfrm/xfrm_device.c +++ b/net/xfrm/xfrm_device.c @@@ -106,10 -106,9 +106,10 @@@ struct sk_buff *validate_xmit_xfrm(stru struct sk_buff *skb2, *nskb, *pskb = NULL; netdev_features_t esp_features = features; struct xfrm_offload *xo = xfrm_offload(skb); + struct net_device *dev = skb->dev; struct sec_path *sp; - if (!xo) + if (!xo || (xo->flags & XFRM_XMIT)) return skb; if (!(features & NETIF_F_HW_ESP)) @@@ -134,20 -129,27 +134,22 @@@ return skb; } + xo->flags |= XFRM_XMIT; + - if (skb_is_gso(skb)) { - struct net_device *dev = skb->dev; + if (skb_is_gso(skb) && unlikely(x->xso.dev != dev)) { + struct sk_buff *segs; - if (unlikely(x->xso.dev != dev)) { - struct sk_buff *segs; + /* Packet got rerouted, fixup features and segment it. */ + esp_features = esp_features & ~(NETIF_F_HW_ESP | NETIF_F_GSO_ESP); - /* Packet got rerouted, fixup features and segment it. */ - esp_features = esp_features & ~(NETIF_F_HW_ESP - | NETIF_F_GSO_ESP); - - segs = skb_gso_segment(skb, esp_features); - if (IS_ERR(segs)) { - kfree_skb(skb); - atomic_long_inc(&dev->tx_dropped); - return NULL; - } else { - consume_skb(skb); - skb = segs; - } + segs = skb_gso_segment(skb, esp_features); + if (IS_ERR(segs)) { + kfree_skb(skb); + atomic_long_inc(&dev->tx_dropped); + return NULL; + } else { + consume_skb(skb); + skb = segs; } }