diff mbox

64k bind(0) bugfix.

Message ID 20090119232151.GA13659@ioremap.net
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Evgeniy Polyakov Jan. 19, 2009, 11:21 p.m. UTC
Hi.

I found the bug in bind conflict resolve path, when bundle was not
unlocked after conflict was detected, attached patch should fix it.

If testing will reveal some new problems I will return with the fix
then. Please apply or queue for the appropriate tree.

Signed-off-by: Evgeniy Polyakov <zbr@ioremap.net>

Comments

David Miller Jan. 19, 2009, 11:24 p.m. UTC | #1
From: Evgeniy Polyakov <zbr@ioremap.net>
Date: Tue, 20 Jan 2009 02:21:51 +0300

> I found the bug in bind conflict resolve path, when bundle was not
> unlocked after conflict was detected, attached patch should fix it.
> 
> If testing will reveal some new problems I will return with the fix
> then. Please apply or queue for the appropriate tree.
> 
> Signed-off-by: Evgeniy Polyakov <zbr@ioremap.net>

Applied, thanks Evgeniy.

If I end up rebasing the net-next tree before publishing, I'll
integrate this fix into the original commit.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Evgeniy Polyakov Jan. 19, 2009, 11:26 p.m. UTC | #2
On Mon, Jan 19, 2009 at 03:24:32PM -0800, David Miller (davem@davemloft.net) wrote:
> If I end up rebasing the net-next tree before publishing, I'll
> integrate this fix into the original commit.

Great, thank you!
diff mbox

Patch

--- ./net/ipv4/inet_connection_sock.c~	2009-01-19 22:19:11.000000000 +0300
+++ ./net/ipv4/inet_connection_sock.c	2009-01-19 22:21:08.000000000 +0300
@@ -172,8 +172,10 @@ 
 		} else {
 			ret = 1;
 			if (inet_csk(sk)->icsk_af_ops->bind_conflict(sk, tb)) {
-				if (sk->sk_reuse && sk->sk_state != TCP_LISTEN && --attempts >= 0)
+				if (sk->sk_reuse && sk->sk_state != TCP_LISTEN && --attempts >= 0) {
+					spin_unlock(&head->lock);
 					goto again;
+				}
 				goto fail_unlock;
 			}
 		}