Skip to content

Commit

Permalink
xfrm: Use the XFRM_GRO to indicate a GRO call on input
Browse files Browse the repository at this point in the history
This is needed to support GRO for ESP in UDP encapsulation.

Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Co-developed-by: Antony Antony <antony.antony@secunet.com>
Signed-off-by: Antony Antony <antony.antony@secunet.com>
Reviewed-by: Eyal Birger <eyal.birger@gmail.com>
  • Loading branch information
Steffen Klassert committed Oct 6, 2023
1 parent 1d495f1 commit b439475
Show file tree
Hide file tree
Showing 3 changed files with 4 additions and 6 deletions.
2 changes: 1 addition & 1 deletion net/ipv4/esp4_offload.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ static struct sk_buff *esp4_gro_receive(struct list_head *head,

/* We don't need to handle errors from xfrm_input, it does all
* the error handling and frees the resources on error. */
xfrm_input(skb, IPPROTO_ESP, spi, -2);
xfrm_input(skb, IPPROTO_ESP, spi, 0);

return ERR_PTR(-EINPROGRESS);
out_reset:
Expand Down
2 changes: 1 addition & 1 deletion net/ipv6/esp6_offload.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ static struct sk_buff *esp6_gro_receive(struct list_head *head,

/* We don't need to handle errors from xfrm_input, it does all
* the error handling and frees the resources on error. */
xfrm_input(skb, IPPROTO_ESP, spi, -2);
xfrm_input(skb, IPPROTO_ESP, spi, 0);

return ERR_PTR(-EINPROGRESS);
out_reset:
Expand Down
6 changes: 2 additions & 4 deletions net/xfrm/xfrm_input.c
Original file line number Diff line number Diff line change
Expand Up @@ -462,7 +462,7 @@ int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type)
struct xfrm_offload *xo = xfrm_offload(skb);
struct sec_path *sp;

if (encap_type < 0) {
if (encap_type < 0 || (xo && xo->flags & XFRM_GRO)) {
x = xfrm_input_state(skb);

if (unlikely(x->km.state != XFRM_STATE_VALID)) {
Expand All @@ -485,9 +485,7 @@ int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type)
seq = XFRM_SKB_CB(skb)->seq.input.low;
goto resume;
}

/* encap_type < -1 indicates a GRO call. */
encap_type = 0;
/* GRO call */
seq = XFRM_SPI_SKB_CB(skb)->seq;

if (xo && (xo->flags & CRYPTO_DONE)) {
Expand Down

0 comments on commit b439475

Please sign in to comment.