From patchwork Mon Jan 19 23:21:51 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Evgeniy Polyakov X-Patchwork-Id: 19400 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id 72F3DDDFC3 for ; Tue, 20 Jan 2009 10:21:52 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753226AbZASXVs (ORCPT ); Mon, 19 Jan 2009 18:21:48 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752883AbZASXVs (ORCPT ); Mon, 19 Jan 2009 18:21:48 -0500 Received: from tservice.ru ([195.178.208.66]:39628 "EHLO tservice.net.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752127AbZASXVr (ORCPT ); Mon, 19 Jan 2009 18:21:47 -0500 Received: by tservice.net.ru (Postfix, from userid 1000) id 2D984FF02; Tue, 20 Jan 2009 02:21:51 +0300 (MSK) Date: Tue, 20 Jan 2009 02:21:51 +0300 From: Evgeniy Polyakov To: David Miller Cc: netdev@vger.kernel.org Subject: 64k bind(0) bugfix. Message-ID: <20090119232151.GA13659@ioremap.net> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.13 (2006-08-11) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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 --- ./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; } }