Commit:     8053fc3de720e1027d690f892ff7d7c1737fdd9d
Parent:     7f9c33e515353ea91afc62341161fead19e78567
Author:     Herbert Xu <[EMAIL PROTECTED]>
AuthorDate: Mon Nov 26 19:07:34 2007 +0800
Committer:  Herbert Xu <[EMAIL PROTECTED]>
CommitDate: Mon Nov 26 19:07:34 2007 +0800

    [IPSEC]: Temporarily remove locks around copying of non-atomic fields
    The change 050f009e16f908932070313c1745d09dc69fd62b
        [IPSEC]: Lock state when copying non-atomic fields to user-space
    caused a regression.
    Ingo Molnar reports that it causes a potential dead-lock found by the
    lock validator as it tries to take x->lock within xfrm_state_lock while
    numerous other sites take the locks in opposite order.
    For 2.6.24, the best fix is to simply remove the added locks as that puts
    us back in the same state as we've been in for years.  For later kernels
    a proper fix would be to reverse the locking order for every xfrm state
    user such that if x->lock is taken together with xfrm_state_lock then
    it is to be taken within it.
    Signed-off-by: Herbert Xu <[EMAIL PROTECTED]>
 net/key/af_key.c     |    2 --
 net/xfrm/xfrm_user.c |    2 --
 2 files changed, 0 insertions(+), 4 deletions(-)

diff --git a/net/key/af_key.c b/net/key/af_key.c
index 3b2d864..878039b 100644
--- a/net/key/af_key.c
+++ b/net/key/af_key.c
@@ -1015,9 +1015,7 @@ static inline struct sk_buff *pfkey_xfrm_state2msg(struct 
xfrm_state *x)
        struct sk_buff *skb;
-       spin_lock_bh(&x->lock);
        skb = __pfkey_xfrm_state2msg(x, 1, 3);
-       spin_unlock_bh(&x->lock);
        return skb;
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
index d41588d..e75dbdc 100644
--- a/net/xfrm/xfrm_user.c
+++ b/net/xfrm/xfrm_user.c
@@ -507,7 +507,6 @@ static int copy_to_user_state_extra(struct xfrm_state *x,
                                    struct xfrm_usersa_info *p,
                                    struct sk_buff *skb)
-       spin_lock_bh(&x->lock);
        copy_to_user_state(x, p);
        if (x->coaddr)
@@ -515,7 +514,6 @@ static int copy_to_user_state_extra(struct xfrm_state *x,
        if (x->lastused)
                NLA_PUT_U64(skb, XFRMA_LASTUSED, x->lastused);
-       spin_unlock_bh(&x->lock);
        if (x->aalg)
                NLA_PUT(skb, XFRMA_ALG_AUTH, alg_len(x->aalg), x->aalg);
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at

Reply via email to