FAILED: Patch "xfrm: Provide private skb extensions for segmented and hw offloaded ESP packets" failed to apply to 4.19-stable tree
Subsystems (3)
Sasha Levin
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Thanks,
Sasha
------------------ original commit in Linus's tree ------------------
From c7dbf4c08868d9db89b8bfe8f8245ca61b01ed2f Mon Sep 17 00:00:00 2001
From: Steffen Klassert <[email protected]>
Date: Fri, 26 Mar 2021 09:44:48 +0100
Subject: [PATCH] xfrm: Provide private skb extensions for segmented and hw
offloaded ESP packets
Commit 94579ac3f6d0 ("xfrm: Fix double ESP trailer insertion in IPsec crypto offload.") added a XFRM_XMIT flag to avoid duplicate ESP trailer insertion on HW offload. This flag is set on the secpath that is shared amongst segments. This lead to a situation where some segments are not transformed correctly when segmentation happens at layer 3.
Fix this by using private skb extensions for segmented and hw offloaded ESP packets.
--- net/ipv4/esp4_offload.c | 11 ++++++++++- net/ipv6/esp6_offload.c | 11 ++++++++++- net/xfrm/xfrm_device.c | 2 -- 3 files changed, 20 insertions(+), 4 deletions(-)
net/ipv4/esp4_offload.c +10 -1
@@ -314,8 +314,17 @@ static int esp_xmit(struct xfrm_state *x, struct sk_buff *skb, netdev_features_ip_hdr (skb)->tot_len =htons (skb->len);ip_send_check (ip_hdr (skb)); -if (hw_offload) +if (hw_offload) { +if (!skb_ext_add (skb,SKB_EXT_SEC_PATH )) +return -ENOMEM ; + + xo =xfrm_offload (skb); +if (!xo) +return -EINVAL ; + + xo->flags |=XFRM_XMIT ;return 0 ; + } err =esp_output_tail (x, skb, &esp);if (err)
net/ipv6/esp6_offload.c +10 -1
@@ -348,8 +348,17 @@ static int esp6_xmit(struct xfrm_state *x, struct sk_buff *skb, netdev_featuresipv6_hdr (skb)->payload_len =htons (len); -if (hw_offload) +if (hw_offload) { +if (!skb_ext_add (skb,SKB_EXT_SEC_PATH )) +return -ENOMEM ; + + xo =xfrm_offload (skb); +if (!xo) +return -EINVAL ; + + xo->flags |=XFRM_XMIT ;return 0 ; + } err =esp6_output_tail (x, skb, &esp);if (err)
net/xfrm/xfrm_device.c +0 -2
@@ -134,8 +134,6 @@ struct sk_buff *validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t featurreturn skb; } - xo->flags |=XFRM_XMIT ; -if (skb_is_gso (skb) &&unlikely (x->xso.dev != dev)) {struct sk_buff *segs;
Signature · 1 line
2.30.2