Received: by 2002:a17:90a:9307:0:0:0:0 with SMTP id p7csp3961730pjo; Tue, 3 Mar 2020 10:08:52 -0800 (PST) X-Google-Smtp-Source: ADFU+vtfUvMZP08Zs1sF926BOiXHO5KSVJ2B2JZ9yajLRL+B06gYEOAR7Ucy6uyPTmqYzVgG35lb X-Received: by 2002:aca:4ed7:: with SMTP id c206mr3178384oib.161.1583258931925; Tue, 03 Mar 2020 10:08:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1583258931; cv=none; d=google.com; s=arc-20160816; b=Gg5Q3pnq2puPCLnd0hqCJCnI+P8xf1FF76mxas5CFQ++QMftYGz6BSC0PWYQOogS95 t2UNwuZCbopGF/gB3sLRbK1DKwuIVSnR26XMdq3/4KMn64VqbAD7T5mhVdoWc7LQiKE5 J/1sZlYUhvrqIIfVCJBGNKHp6j9Q1wQtmDHhAcCwTsxvEz8jaSUUU7sQJKVD3SNDBK2j Xh2Aa0mT1jwhGe2VvHq6zqIDCgsQwDP/kgui9hba5rA1ho4yJswumx5M7/8yDskiyDg/ OyuIVIyR4s6jdNsUEdC6fdH6ACk3D7M4MPAtHj3mR2npn6d7aOPGY+JyLlPWzpxoaQ/C TpwA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=vT/X6FcxL264W6WZ0l78Uaoy77+5y8we7hqxM3AUpe8=; b=tKJ5+XbP3MLrD3Msd7WFSqLZpJDXm5AhkSG4TffsZG2ldTGQbzi9OIedTW+L5EkKAe eZ28HoMaHpMpneiiK9Fo4JfgDUvn8icQzQrLhA/rIMsDbsKoYOK5iVoH2UJsJdUHvjdw sKVKrEdWzwIZhj39AlBM2OzTtv6H/4N525PIhmR9s8Y7/VByndaIge5hIxnQ4c+FvLxo GvWh4HnZ1pi8DYNfwuNFkUWi/2OqLP3GdsVEUVfWbUXu5ukxuoEEzl2fRuwaMIE++YMI mR1KxNgew8xAcvCgT6hJd7OkTaJBxBZHG9WBo0hDIluZTFEqd2gTaIu+c0LjYAC782AC Nrlw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=rvfc2I6y; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s8si8263564oic.7.2020.03.03.10.08.39; Tue, 03 Mar 2020 10:08:51 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=rvfc2I6y; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732485AbgCCRyJ (ORCPT + 99 others); Tue, 3 Mar 2020 12:54:09 -0500 Received: from mail.kernel.org ([198.145.29.99]:35104 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732478AbgCCRyH (ORCPT ); Tue, 3 Mar 2020 12:54:07 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 0C2A62146E; Tue, 3 Mar 2020 17:54:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1583258046; bh=RBkE2p+p1wkYJ94iTvM47rJcXwsX+MC8/AcJdXC+qCU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rvfc2I6yxx6pAKIXUzAanC4HzDGz+Wqm8cAJlwlzFB5M0/nQ7KN/WX8haHPzHZoue omTmJg0zBCsL4jJzNqyMBL7tNWapsBvLfiRsy8UexfKPqVmjCiyQmpmYX6J6KS4SMc 0m8TNsrBkmqH8/kN6GNcZ0fqD9gdAlP34pYGzmjE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Pavel Roskin , Willem de Bruijn , Eric Dumazet , "David S. Miller" Subject: [PATCH 5.4 013/152] udp: rehash on disconnect Date: Tue, 3 Mar 2020 18:41:51 +0100 Message-Id: <20200303174304.011342222@linuxfoundation.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200303174302.523080016@linuxfoundation.org> References: <20200303174302.523080016@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Willem de Bruijn [ Upstream commit 303d0403b8c25e994e4a6e45389e173cf8706fb5 ] As of the below commit, udp sockets bound to a specific address can coexist with one bound to the any addr for the same port. The commit also phased out the use of socket hashing based only on port (hslot), in favor of always hashing on {addr, port} (hslot2). The change broke the following behavior with disconnect (AF_UNSPEC): server binds to 0.0.0.0:1337 server connects to 127.0.0.1:80 server disconnects client connects to 127.0.0.1:1337 client sends "hello" server reads "hello" // times out, packet did not find sk On connect the server acquires a specific source addr suitable for routing to its destination. On disconnect it reverts to the any addr. The connect call triggers a rehash to a different hslot2. On disconnect, add the same to return to the original hslot2. Skip this step if the socket is going to be unhashed completely. Fixes: 4cdeeee9252a ("net: udp: prefer listeners bound to an address") Reported-by: Pavel Roskin Signed-off-by: Willem de Bruijn Reviewed-by: Eric Dumazet Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- net/ipv4/udp.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -1856,8 +1856,12 @@ int __udp_disconnect(struct sock *sk, in inet->inet_dport = 0; sock_rps_reset_rxhash(sk); sk->sk_bound_dev_if = 0; - if (!(sk->sk_userlocks & SOCK_BINDADDR_LOCK)) + if (!(sk->sk_userlocks & SOCK_BINDADDR_LOCK)) { inet_reset_saddr(sk); + if (sk->sk_prot->rehash && + (sk->sk_userlocks & SOCK_BINDPORT_LOCK)) + sk->sk_prot->rehash(sk); + } if (!(sk->sk_userlocks & SOCK_BINDPORT_LOCK)) { sk->sk_prot->unhash(sk);