Merge tag 'linux-kselftest-4.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel...
[firefly-linux-kernel-4.4.55.git] / net / xfrm / xfrm_input.c
index b58286ecd156fdb9de2a33ca0ede0fe3194bf289..60ce7014e1b094ef0013f27330ab8c0bec24e284 100644 (file)
@@ -31,7 +31,7 @@ int xfrm_input_register_afinfo(struct xfrm_input_afinfo *afinfo)
                return -EAFNOSUPPORT;
        spin_lock_bh(&xfrm_input_afinfo_lock);
        if (unlikely(xfrm_input_afinfo[afinfo->family] != NULL))
-               err = -ENOBUFS;
+               err = -EEXIST;
        else
                rcu_assign_pointer(xfrm_input_afinfo[afinfo->family], afinfo);
        spin_unlock_bh(&xfrm_input_afinfo_lock);
@@ -254,13 +254,13 @@ int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type)
                skb->sp->xvec[skb->sp->len++] = x;
 
                spin_lock(&x->lock);
-               if (unlikely(x->km.state == XFRM_STATE_ACQ)) {
-                       XFRM_INC_STATS(net, LINUX_MIB_XFRMACQUIREERROR);
-                       goto drop_unlock;
-               }
 
                if (unlikely(x->km.state != XFRM_STATE_VALID)) {
-                       XFRM_INC_STATS(net, LINUX_MIB_XFRMINSTATEINVALID);
+                       if (x->km.state == XFRM_STATE_ACQ)
+                               XFRM_INC_STATS(net, LINUX_MIB_XFRMACQUIREERROR);
+                       else
+                               XFRM_INC_STATS(net,
+                                              LINUX_MIB_XFRMINSTATEINVALID);
                        goto drop_unlock;
                }