aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/esp4_offload.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4/esp4_offload.c')
-rw-r--r--net/ipv4/esp4_offload.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/net/ipv4/esp4_offload.c b/net/ipv4/esp4_offload.c
index b61a8ff558f9..8edcfa66d1e5 100644
--- a/net/ipv4/esp4_offload.c
+++ b/net/ipv4/esp4_offload.c
@@ -52,13 +52,13 @@ static struct sk_buff *esp4_gro_receive(struct list_head *head,
52 goto out; 52 goto out;
53 53
54 if (sp->len == XFRM_MAX_DEPTH) 54 if (sp->len == XFRM_MAX_DEPTH)
55 goto out; 55 goto out_reset;
56 56
57 x = xfrm_state_lookup(dev_net(skb->dev), skb->mark, 57 x = xfrm_state_lookup(dev_net(skb->dev), skb->mark,
58 (xfrm_address_t *)&ip_hdr(skb)->daddr, 58 (xfrm_address_t *)&ip_hdr(skb)->daddr,
59 spi, IPPROTO_ESP, AF_INET); 59 spi, IPPROTO_ESP, AF_INET);
60 if (!x) 60 if (!x)
61 goto out; 61 goto out_reset;
62 62
63 sp->xvec[sp->len++] = x; 63 sp->xvec[sp->len++] = x;
64 sp->olen++; 64 sp->olen++;
@@ -66,7 +66,7 @@ static struct sk_buff *esp4_gro_receive(struct list_head *head,
66 xo = xfrm_offload(skb); 66 xo = xfrm_offload(skb);
67 if (!xo) { 67 if (!xo) {
68 xfrm_state_put(x); 68 xfrm_state_put(x);
69 goto out; 69 goto out_reset;
70 } 70 }
71 } 71 }
72 72
@@ -82,6 +82,8 @@ static struct sk_buff *esp4_gro_receive(struct list_head *head,
82 xfrm_input(skb, IPPROTO_ESP, spi, -2); 82 xfrm_input(skb, IPPROTO_ESP, spi, -2);
83 83
84 return ERR_PTR(-EINPROGRESS); 84 return ERR_PTR(-EINPROGRESS);
85out_reset:
86 secpath_reset(skb);
85out: 87out:
86 skb_push(skb, offset); 88 skb_push(skb, offset);
87 NAPI_GRO_CB(skb)->same_flow = 0; 89 NAPI_GRO_CB(skb)->same_flow = 0;