diff options
| author | Sabrina Dubroca <[email protected]> | 2025-08-04 09:26:25 +0000 |
|---|---|---|
| committer | Steffen Klassert <[email protected]> | 2025-08-07 06:05:10 +0000 |
| commit | 234d1eff5d4987024be9d40ac07b918a5ae8db1a (patch) | |
| tree | 58ee824d3018ef3dc58262407a9b45af2fbaffef | |
| parent | xfrm: flush all states in xfrm_state_fini (diff) | |
| download | kernel-234d1eff5d4987024be9d40ac07b918a5ae8db1a.tar.gz kernel-234d1eff5d4987024be9d40ac07b918a5ae8db1a.zip | |
xfrm: restore GSO for SW crypto
Commit 49431af6c4ef incorrectly assumes that the GSO path is only used
by HW offload, but it's also useful for SW crypto.
This patch re-enables GSO for SW crypto. It's not an exact revert to
preserve the other changes made to xfrm_dev_offload_ok afterwards, but
it reverts all of its effects.
Fixes: 49431af6c4ef ("xfrm: rely on XFRM offload")
Signed-off-by: Sabrina Dubroca <[email protected]>
Reviewed-by: Leon Romanovsky <[email protected]>
Reviewed-by: Zhu Yanjun <[email protected]>
Signed-off-by: Steffen Klassert <[email protected]>
| -rw-r--r-- | net/xfrm/xfrm_device.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/net/xfrm/xfrm_device.c b/net/xfrm/xfrm_device.c index d2819baea414..1f88472aaac0 100644 --- a/net/xfrm/xfrm_device.c +++ b/net/xfrm/xfrm_device.c @@ -415,10 +415,12 @@ bool xfrm_dev_offload_ok(struct sk_buff *skb, struct xfrm_state *x) struct net_device *dev = x->xso.dev; bool check_tunnel_size; - if (x->xso.type == XFRM_DEV_OFFLOAD_UNSPECIFIED) + if (!x->type_offload || + (x->xso.type == XFRM_DEV_OFFLOAD_UNSPECIFIED && x->encap)) return false; - if ((dev == xfrm_dst_path(dst)->dev) && !xdst->child->xfrm) { + if ((!dev || dev == xfrm_dst_path(dst)->dev) && + !xdst->child->xfrm) { mtu = xfrm_state_mtu(x, xdst->child_mtu_cached); if (skb->len <= mtu) goto ok; @@ -430,6 +432,9 @@ bool xfrm_dev_offload_ok(struct sk_buff *skb, struct xfrm_state *x) return false; ok: + if (!dev) + return true; + check_tunnel_size = x->xso.type == XFRM_DEV_OFFLOAD_PACKET && x->props.mode == XFRM_MODE_TUNNEL; switch (x->props.family) { |
