]> Pileus Git - ~andy/linux/blobdiff - net/xfrm/xfrm_output.c
xfrm: fix a unbalanced lock
[~andy/linux] / net / xfrm / xfrm_output.c
index 95a338c89f99d87af24ffa97faf17e1a7ef700e8..bcfda8921b5bf944d38ac3e087eb1cccfac327fe 100644 (file)
@@ -61,6 +61,12 @@ static int xfrm_output_one(struct sk_buff *skb, int err)
                }
 
                spin_lock_bh(&x->lock);
+
+               if (unlikely(x->km.state != XFRM_STATE_VALID)) {
+                       XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTSTATEINVALID);
+                       goto error;
+               }
+
                err = xfrm_state_check_expire(x);
                if (err) {
                        XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTSTATEEXPIRED);