|
@@ -238,11 +238,6 @@ int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type)
|
|
|
|
|
|
skb->sp->xvec[skb->sp->len++] = x;
|
|
skb->sp->xvec[skb->sp->len++] = x;
|
|
|
|
|
|
- if (xfrm_tunnel_check(skb, x, family)) {
|
|
|
|
- XFRM_INC_STATS(net, LINUX_MIB_XFRMINSTATEMODEERROR);
|
|
|
|
- goto drop;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
spin_lock(&x->lock);
|
|
spin_lock(&x->lock);
|
|
if (unlikely(x->km.state == XFRM_STATE_ACQ)) {
|
|
if (unlikely(x->km.state == XFRM_STATE_ACQ)) {
|
|
XFRM_INC_STATS(net, LINUX_MIB_XFRMACQUIREERROR);
|
|
XFRM_INC_STATS(net, LINUX_MIB_XFRMACQUIREERROR);
|
|
@@ -271,6 +266,11 @@ int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type)
|
|
|
|
|
|
spin_unlock(&x->lock);
|
|
spin_unlock(&x->lock);
|
|
|
|
|
|
|
|
+ if (xfrm_tunnel_check(skb, x, family)) {
|
|
|
|
+ XFRM_INC_STATS(net, LINUX_MIB_XFRMINSTATEMODEERROR);
|
|
|
|
+ goto drop;
|
|
|
|
+ }
|
|
|
|
+
|
|
seq_hi = htonl(xfrm_replay_seqhi(x, seq));
|
|
seq_hi = htonl(xfrm_replay_seqhi(x, seq));
|
|
|
|
|
|
XFRM_SKB_CB(skb)->seq.input.low = seq;
|
|
XFRM_SKB_CB(skb)->seq.input.low = seq;
|