ChangeSet 1.2009.16.10, 2005/03/14 21:38:52-08:00, [EMAIL PROTECTED]

        [IPSEC]: Do not hold state lock while checking size.
        
        This can elicit ICMP message output and thus result in a
        deadlock.
        
        Signed-off-by: Herbert Xu <[EMAIL PROTECTED]>
        Signed-off-by: David S. Miller <[EMAIL PROTECTED]>



 ipv4/xfrm4_output.c |   12 ++++++------
 ipv6/xfrm6_output.c |   12 ++++++------
 2 files changed, 12 insertions(+), 12 deletions(-)


diff -Nru a/net/ipv4/xfrm4_output.c b/net/ipv4/xfrm4_output.c
--- a/net/ipv4/xfrm4_output.c   2005-03-15 00:09:24 -08:00
+++ b/net/ipv4/xfrm4_output.c   2005-03-15 00:09:24 -08:00
@@ -103,16 +103,16 @@
                        goto error_nolock;
        }
 
-       spin_lock_bh(&x->lock);
-       err = xfrm_state_check(x, skb);
-       if (err)
-               goto error;
-
        if (x->props.mode) {
                err = xfrm4_tunnel_check_size(skb);
                if (err)
-                       goto error;
+                       goto error_nolock;
        }
+
+       spin_lock_bh(&x->lock);
+       err = xfrm_state_check(x, skb);
+       if (err)
+               goto error;
 
        xfrm4_encap(skb);
 
diff -Nru a/net/ipv6/xfrm6_output.c b/net/ipv6/xfrm6_output.c
--- a/net/ipv6/xfrm6_output.c   2005-03-15 00:09:24 -08:00
+++ b/net/ipv6/xfrm6_output.c   2005-03-15 00:09:24 -08:00
@@ -103,16 +103,16 @@
                        goto error_nolock;
        }
 
-       spin_lock_bh(&x->lock);
-       err = xfrm_state_check(x, skb);
-       if (err)
-               goto error;
-
        if (x->props.mode) {
                err = xfrm6_tunnel_check_size(skb);
                if (err)
-                       goto error;
+                       goto error_nolock;
        }
+
+       spin_lock_bh(&x->lock);
+       err = xfrm_state_check(x, skb);
+       if (err)
+               goto error;
 
        xfrm6_encap(skb);
 
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to