Patchwork 64k bind(0) bugfix.

login
register
mail settings
Submitter Evgeniy Polyakov
Date Jan. 19, 2009, 11:21 p.m.
Message ID <20090119232151.GA13659@ioremap.net>
Download mbox | patch
Permalink /patch/19400/
State Accepted
Delegated to: David Miller
Headers show

Comments

Evgeniy Polyakov - Jan. 19, 2009, 11:21 p.m.
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>
David Miller - Jan. 19, 2009, 11:24 p.m.
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.
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!

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;
 			}
 		}