From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AF621C7EE23 for ; Sun, 26 Feb 2023 15:14:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231828AbjBZPOB (ORCPT ); Sun, 26 Feb 2023 10:14:01 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33450 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231799AbjBZPNr (ORCPT ); Sun, 26 Feb 2023 10:13:47 -0500 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DF6411F481; Sun, 26 Feb 2023 07:03:59 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 745EF60C16; Sun, 26 Feb 2023 14:53:12 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B4A3FC433D2; Sun, 26 Feb 2023 14:53:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1677423191; bh=0Bk7T2uZdKlgJ/lhz+xhUT3w1JmdN8udUEMnlO9DQeM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nYWjk7toasc+/VcfnERl/4bUpLJSiduPtOfFt35ZhxMJm/DJ+Ix20Ibw99DLQYC8u e9hTg4fRSdQ3H6vvJVPR3jklUcrzQswvQ4JfgnU/5qDrViV3krN2921/8vjFP40fen 9vtSbkjhfkFIWGyjHN8/yQS7By6IAo80Xu0ICitvrlEB2Uz1i0TawQxyuRh4Cy7aUn 4K7UNk/1zVtRTy3BPvxSKk+fLZgUDlqQfCYTWewnVbrZYLrjhNQFnAO/YyuNPxsMHt D61cyJze8VpBevyRFVGD+X8XrOvho9rw9EDQxoo1CsztBZYEN2j/mybOtMQ1nH9gjY Uu9xRw7S0B8Dw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Pietro Borrello , Kuniyuki Iwashima , Eric Dumazet , Paolo Abeni , Sasha Levin , davem@davemloft.net, dsahern@kernel.org, kuba@kernel.org, netdev@vger.kernel.org Subject: [PATCH AUTOSEL 4.14 06/11] inet: fix fast path in __inet_hash_connect() Date: Sun, 26 Feb 2023 09:52:48 -0500 Message-Id: <20230226145255.829660-6-sashal@kernel.org> X-Mailer: git-send-email 2.39.0 In-Reply-To: <20230226145255.829660-1-sashal@kernel.org> References: <20230226145255.829660-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Pietro Borrello [ Upstream commit 21cbd90a6fab7123905386985e3e4a80236b8714 ] __inet_hash_connect() has a fast path taken if sk_head(&tb->owners) is equal to the sk parameter. sk_head() returns the hlist_entry() with respect to the sk_node field. However entries in the tb->owners list are inserted with respect to the sk_bind_node field with sk_add_bind_node(). Thus the check would never pass and the fast path never execute. This fast path has never been executed or tested as this bug seems to be present since commit 1da177e4c3f4 ("Linux-2.6.12-rc2"), thus remove it to reduce code complexity. Signed-off-by: Pietro Borrello Reviewed-by: Kuniyuki Iwashima Reviewed-by: Eric Dumazet Link: https://lore.kernel.org/r/20230112-inet_hash_connect_bind_head-v3-1-b591fd212b93@diag.uniroma1.it Signed-off-by: Paolo Abeni Signed-off-by: Sasha Levin --- net/ipv4/inet_hashtables.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c index 590801a7487f7..c5092e2b5933e 100644 --- a/net/ipv4/inet_hashtables.c +++ b/net/ipv4/inet_hashtables.c @@ -616,17 +616,7 @@ int __inet_hash_connect(struct inet_timewait_death_row *death_row, u32 index; if (port) { - head = &hinfo->bhash[inet_bhashfn(net, port, - hinfo->bhash_size)]; - tb = inet_csk(sk)->icsk_bind_hash; - spin_lock_bh(&head->lock); - if (sk_head(&tb->owners) == sk && !sk->sk_bind_node.next) { - inet_ehash_nolisten(sk, NULL, NULL); - spin_unlock_bh(&head->lock); - return 0; - } - spin_unlock(&head->lock); - /* No definite answer... Walk to established hash table */ + local_bh_disable(); ret = check_established(death_row, sk, port, NULL); local_bh_enable(); return ret; -- 2.39.0