diff options
Diffstat (limited to 'net/xfrm/xfrm_output.c')
-rw-r--r-- | net/xfrm/xfrm_output.c | 15 |
1 files changed, 4 insertions, 11 deletions
diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c index 4b63776a0264..1aba03f449cc 100644 --- a/net/xfrm/xfrm_output.c +++ b/net/xfrm/xfrm_output.c | |||
@@ -67,17 +67,10 @@ static int xfrm_output_one(struct sk_buff *skb, int err) | |||
67 | goto error; | 67 | goto error; |
68 | } | 68 | } |
69 | 69 | ||
70 | if (x->type->flags & XFRM_TYPE_REPLAY_PROT) { | 70 | err = x->repl->overflow(x, skb); |
71 | XFRM_SKB_CB(skb)->seq.output.low = ++x->replay.oseq; | 71 | if (err) { |
72 | if (unlikely(x->replay.oseq == 0)) { | 72 | XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTSTATESEQERROR); |
73 | XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTSTATESEQERROR); | 73 | goto error; |
74 | x->replay.oseq--; | ||
75 | xfrm_audit_state_replay_overflow(x, skb); | ||
76 | err = -EOVERFLOW; | ||
77 | goto error; | ||
78 | } | ||
79 | if (xfrm_aevent_is_on(net)) | ||
80 | xfrm_replay_notify(x, XFRM_REPLAY_UPDATE); | ||
81 | } | 74 | } |
82 | 75 | ||
83 | x->curlft.bytes += skb->len; | 76 | x->curlft.bytes += skb->len; |