From patchwork Fri Mar 14 09:24:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Youngmin Nam X-Patchwork-Id: 14016509 X-Patchwork-Delegate: kuba@kernel.org Received: from mailout4.samsung.com (mailout4.samsung.com [203.254.224.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 664951EEA29 for ; Fri, 14 Mar 2025 09:21:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=203.254.224.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741944097; cv=none; b=RRWQQMqiVxj8Hpe1GDCWcBLnyO8+e4F4FweswGLB564Lp/yRL8mhUyAwUGPkfjfsPMy8XrdYBcJKXCEWC1pnaAzzea9KFWDnmQGmx4xkgvrpKNtcWXFrGMLIKx5dcLU77FMB0khcZCu4olaKovQqL/60dK8TNjAi4mn+dSs42A0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741944097; c=relaxed/simple; bh=TvoOmyRV1P0CxMrsROtJHUSz7hWCQ459PFWfGmwMX1s=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version:Content-Type: References; b=NAKMbaFmy7ACUKdk+/h233tENDPp5GShqOcGkXJAICwUuCw7enec7F7LYBfnmK55iz38L5YSmE7cXcJk5TiU7ttxq09pmYShYJYuk54sf3CGAC/g3vPVWl9pC4pn9o+/7dBbfoVU7u7+xvQ332KwKbwWQhXzI6tcExe9Kayo4PE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=samsung.com; spf=pass smtp.mailfrom=samsung.com; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b=oRR6xXed; arc=none smtp.client-ip=203.254.224.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=samsung.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="oRR6xXed" Received: from epcas2p4.samsung.com (unknown [182.195.41.56]) by mailout4.samsung.com (KnoxPortal) with ESMTP id 20250314092127epoutp04c956e680c79391ea05454f34c66446bd~soOslq-6_0312003120epoutp04Y for ; Fri, 14 Mar 2025 09:21:27 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout4.samsung.com 20250314092127epoutp04c956e680c79391ea05454f34c66446bd~soOslq-6_0312003120epoutp04Y DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1741944087; bh=s/FLtSsThZifg860YzHPdVeWeC6b46eBkekISgy9cFY=; h=From:To:Cc:Subject:Date:References:From; b=oRR6xXedQC8RXQdaABEUO26wDbPvfb+RnulCfgG+s4toHrzSXyF+8gvHq03KOsP/Z GZvf2K5mcAHHNdHX82hQAHid1QsF95yfpnaZooE66e9mj7aT7SASKKFb93enqnC+Cr eRJJZRzqrlu1xWcINA591SXEq+Yo48BLr15SWSpk= Received: from epsnrtp3.localdomain (unknown [182.195.42.164]) by epcas2p3.samsung.com (KnoxPortal) with ESMTP id 20250314092126epcas2p374624cb3a109cbbc279471c369f67b56~soOrV_lMu1703717037epcas2p3k; Fri, 14 Mar 2025 09:21:26 +0000 (GMT) Received: from epsmges2p1.samsung.com (unknown [182.195.36.101]) by epsnrtp3.localdomain (Postfix) with ESMTP id 4ZDf4j5ZcFz4x9Q8; Fri, 14 Mar 2025 09:21:25 +0000 (GMT) Received: from epcas2p4.samsung.com ( [182.195.41.56]) by epsmges2p1.samsung.com (Symantec Messaging Gateway) with SMTP id 54.9C.23368.515F3D76; Fri, 14 Mar 2025 18:21:25 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas2p4.samsung.com (KnoxPortal) with ESMTPA id 20250314092125epcas2p418cd0caeffc32b05fba4fdd2e4ffb9fa~soOqFU9fN2558125581epcas2p4I; Fri, 14 Mar 2025 09:21:25 +0000 (GMT) Received: from epsmgmc1p1new.samsung.com (unknown [182.195.42.40]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20250314092124epsmtrp1463cf08f860d8c8be3ea69139d07ab36~soOqDKPgY0533405334epsmtrp1K; Fri, 14 Mar 2025 09:21:24 +0000 (GMT) X-AuditID: b6c32a45-dc9f070000005b48-23-67d3f515a493 Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgmc1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 1D.63.23488.415F3D76; Fri, 14 Mar 2025 18:21:24 +0900 (KST) Received: from perf.dsn.sec.samsung.com (unknown [10.229.95.91]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20250314092124epsmtip1957bb83b732a1cb6af5f3fc2cd153959~soOpxvXQz0106001060epsmtip1t; Fri, 14 Mar 2025 09:21:24 +0000 (GMT) From: Youngmin Nam To: stable@vger.kernel.org Cc: ncardwell@google.com, edumazet@google.com, kuba@kernel.org, davem@davemloft.net, dsahern@kernel.org, pabeni@redhat.com, horms@kernel.org, guo88.liu@samsung.com, yiwang.cai@samsung.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, joonki.min@samsung.com, hajun.sung@samsung.com, d7271.choe@samsung.com, sw.ju@samsung.com, dujeong.lee@samsung.com, ycheng@google.com, yyd@google.com, kuro@kuroa.me, youngmin.nam@samsung.com, cmllamas@google.com, willdeacon@google.com, maennich@google.com, gregkh@google.com Subject: [PATCH 1/2] tcp: fix races in tcp_abort() Date: Fri, 14 Mar 2025 18:24:45 +0900 Message-Id: <20250314092446.852230-1-youngmin.nam@samsung.com> X-Mailer: git-send-email 2.39.2 Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA01Te0xTVxze6b30Vra6a0E5wibNNbiAKbQM6FGBkE1dA2YhOjZ1M9DRmxaB tvaW4V4J8h5RHkMnQqNVWJC6McawvOTNKDgZ01oQZiyBwsDhNsDiZG5Zaevmf9/vO993ft/v PDgY7x7bl5Oi1NIapTSNYnvixr5AJNhoN8uF5u8C0MPuWwQa7SgjkG4kF0f1bXksNKuvwNHM wBSBZlceY6j8NEDZXbcwNFUyyEaW9t8w9JOx2AP19v1CIHObjo1WOhYIVHi3A0cD+k1o5YcF gPTfTgGUN71MoILHv+Lo4bSFjRZN2QSq7l4iUM7Fejxms6Spbpwl0TdmSBoNn7El+mJC8nun hS0pbjIAyXLjlnjicGqkgpbKaA2fViarZClKeRQVdyDx9cTwCKFIINqBxBRfKU2no6jd++IF e1PSHGNS/A+kaRkOKl7KMFRIdKRGlaGl+QoVo42iaLUsTS1WBzPSdCZDKQ9W0tqdIqEwNNwh TEpVlI/tUle8cHyo4QKeBWo8i8A6DiTD4M3GSY8i4MnhkS0AThhuY65iCcBV2xPCVawAaMmz sZ5a5m92uVUdAM6X1QJXYQfw/LINW1OxSQE0Dv7jWOBwvElfaLXsWtNg5Bkc1s3r8DWNFxkK zbYq9hrGyQDY0mp1duCS0fDRiRzWmheS/rB6ErroDXDonM1pxRx0ztUqZwhITnJgbXsB7kq3 G57sO4O5sBe8b2oiXNgXzpfkuzEDs6wTbnMugNfH5tyGV2HlbIEzNEYGwm/aQlwZtsL+CXff 9bCw72/CRXNhYT7PZdwGV083ABd+CbZXX3ZvKIFLA31OzCOPwK6zdqIU+Fc+M03lM9NU/t9X DzAD2ESrmXQ5zYSqRf/dabIqvRE4H3rQnhZQ/uCP4F7A4oBeADkY5c1FZrOcx5VJP/yI1qgS NRlpNNMLwh3HW4b5bkxWOX6KUpsoCtshDIuIEIlDw4Viyof7cUuunEfKpVo6labVtOapj8VZ 55vFSqn2qDJeajJu83mTPDZuOigYm35rbvT6ltjWzIJPdQlXI56reDKCTJv9Q4dfTm76Pm7w 2v5PYu0i2bshq5oTMr/ld3R/3fDT1w1XLDaztnYp3vh5BL+9XtBQ9KftTpj9eL/85NEN3OhT 1KMDsUbLvmuTQ2H9d2urd3qXGi7ssQYvT86ILxk7KYEpOOVFcU1O/MxiYM/MawmfH7GU+0j5 w/dXx58/xMkM0MW8fdTafEUiSBrLvhHDt3tRSQkema8cPhgZ3uPXrWzVedwzCb7wYXpi8y2n agcuvz968UuZIs7Utr9O9sB6Z+7sezX1DUFfdx8rLflqe+eV7u3Nas/mBXam4cdDFM4opKIg TMNI/wW8glIjcQQAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFuplkeLIzCtJLcpLzFFi42LZdlhJTlfk6+V0g99njC2+HLjEbnFt70R2 iznnW1gs1u1qZbJ4tmAGi8XTY4/YLZ59+8lsMXkKo0XT/kvMFo/6T7BZXN39jtniwrY+VotD h5+zW1zeNYfN4tveN+wWHXf2slgcWyBm8e30G0aLBRsfMVq0Pv7MbtH+8zWLxZfHV9ksPh5v YrdYfOATu0XzwnUsDpIeW1beZPJYsKnUY9OqTjaPBX3sHu/3XWXz6NuyitHj8ya5APYoLpuU 1JzMstQifbsErozJ160LZvBUnNwwn6WBcQlXFyMnh4SAicTLi/uZuxi5OIQEdjNKtEyYygiR kJG4vfIyK4QtLHG/5QgrRNFnRol9/yeAFbEJ6EpsO/EPyObgEBGQkrh/1RqkhllgM4vEm8NP wWqEBYwkLj+ZzQZiswioSuzYeZ8JxOYVsJP43tjMBNIrISAvsfiBBERYUOLkzCcsIDYzULh5 62zmCYx8s5CkZiFJLWBkWsUomVpQnJuem2xYYJiXWq5XnJhbXJqXrpecn7uJERxjWho7GN99 a9I/xMjEwXiIUYKDWUmE1+Ly5XQh3pTEyqrUovz4otKc1OJDjNIcLErivCsNI9KFBNITS1Kz U1MLUotgskwcnFINTN4nz8+9nTsx9OM9tYUTQ6/9OJ7S86zk34rDust0jK5U8a5WVmrQzr6l phjjUczweqKC9Un/wi8z10e+1tz6+PLnA+/eHFy6gGt3ZEBS4YpfKQ/5HPJPNP+fk5OmZDs7 +s6WSRf4/iRcLftx/ua8W137JwanzDgQ77bQXDBi727djy9nfjqRF5m2rWyxBLcOm7ZX3SKn I6v/O16USm95uC9/UvLN7akZpsLdlfULvmmvFoxuniXLxhlje2+V+c0u+WWO25UPrNx7M2ya Zo5xt8eRNo39i7JCD0Xyz31tm/FOhs98Pbe7bHC62qI03W79vnN7WV+FPeG+Guq+3Wop/8Kf R5f3HilXrZ1XJ39JRUmJpTgj0VCLuag4EQC0qmpmIAMAAA== X-CMS-MailID: 20250314092125epcas2p418cd0caeffc32b05fba4fdd2e4ffb9fa X-Msg-Generator: CA X-Sendblock-Type: AUTO_CONFIDENTIAL CMS-TYPE: 102P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20250314092125epcas2p418cd0caeffc32b05fba4fdd2e4ffb9fa References: X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet tcp_abort() has the same issue than the one fixed in the prior patch in tcp_write_err(). commit 5ce4645c23cf5f048eb8e9ce49e514bababdee85 upstream. To apply commit bac76cf89816bff06c4ec2f3df97dc34e150a1c4, this patch must be applied first. In order to get consistent results from tcp_poll(), we must call sk_error_report() after tcp_done(). We can use tcp_done_with_error() to centralize this logic. Fixes: c1e64e298b8c ("net: diag: Support destroying TCP sockets.") Signed-off-by: Eric Dumazet Acked-by: Neal Cardwell Link: https://lore.kernel.org/r/20240528125253.1966136-4-edumazet@google.com Signed-off-by: Jakub Kicinski Cc: # v5.10+ [youngmin: Resolved minor conflict in net/ipv4/tcp.c] Signed-off-by: Youngmin Nam --- net/ipv4/tcp.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 7ad82be40f34..9fe164aa185c 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -4630,13 +4630,9 @@ int tcp_abort(struct sock *sk, int err) bh_lock_sock(sk); if (!sock_flag(sk, SOCK_DEAD)) { - WRITE_ONCE(sk->sk_err, err); - /* This barrier is coupled with smp_rmb() in tcp_poll() */ - smp_wmb(); - sk_error_report(sk); if (tcp_need_reset(sk->sk_state)) tcp_send_active_reset(sk, GFP_ATOMIC); - tcp_done(sk); + tcp_done_with_error(sk, err); } bh_unlock_sock(sk); From patchwork Fri Mar 14 09:24:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Youngmin Nam X-Patchwork-Id: 14016510 X-Patchwork-Delegate: kuba@kernel.org Received: from mailout4.samsung.com (mailout4.samsung.com [203.254.224.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 608591E633C for ; Fri, 14 Mar 2025 09:21:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=203.254.224.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741944102; cv=none; b=QmrFKqtwwSUcPoEosp4ZXdWLh7DQB5g4sLVlkaLUsYjNx0hGEXdFokhHrpZB0a3AFAZ0rIqfpi1JGsc8Zu2fjsNo1JHbP9KTiOQ7RmIoxnVExGbwmV47mojYu3FQpY6UP2L4IdkR7qKTIlDXFidCSvyWZvKq2uuNyakxl9uS2a0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741944102; c=relaxed/simple; bh=BzrI+MQVbm/6jXqGUS8ON4OO4Uhb3M0vnil1W0SY4xg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:MIME-Version: Content-Type:References; b=aVdq0SySlf0qgH2pkVBWqyHoumkDctupcrE5shJ3Ue+QY93sHT5bpzA5becnKORtM+arpfQYdEZeHAxnxFie/u6DN1cjHRsC+BgYXFIeLFrg0GO6keUBL7ujqnXcp6RHLzuG03fvm5nRBb9BYT6E7sSm9wcgRLOPg/Mrbflf3ZY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=samsung.com; spf=pass smtp.mailfrom=samsung.com; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b=iubXgSoZ; arc=none smtp.client-ip=203.254.224.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=samsung.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="iubXgSoZ" Received: from epcas2p2.samsung.com (unknown [182.195.41.54]) by mailout4.samsung.com (KnoxPortal) with ESMTP id 20250314092132epoutp0407b5f4e6eb29877a61681eaf741286eb~soOxdeKan0329903299epoutp04b for ; Fri, 14 Mar 2025 09:21:32 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout4.samsung.com 20250314092132epoutp0407b5f4e6eb29877a61681eaf741286eb~soOxdeKan0329903299epoutp04b DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1741944092; bh=jwFybI78FScw6EFw2tJIl/DO2vG2x0q+jbEpcWUDHSE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=iubXgSoZIgQcm2rgzOMy+uYqpZahF7j3HrP+WSD3Jwt2M022aTMakQLFpJpCmssJi hCLEJS89et/yzw+jA2nZCabK0wWxu9GFophp4hxWgbvHrGJdO3SL6mMRGEcIUzw0SX FLUi2dDOImBGhL042XdmioeFMO5bl5/1XQmYmt8k= Received: from epsnrtp3.localdomain (unknown [182.195.42.164]) by epcas2p1.samsung.com (KnoxPortal) with ESMTP id 20250314092131epcas2p13cc2885f7118460459b017cc64689920~soOwlZDa10480104801epcas2p15; Fri, 14 Mar 2025 09:21:31 +0000 (GMT) Received: from epsmgec2p1.samsung.com (unknown [182.195.36.69]) by epsnrtp3.localdomain (Postfix) with ESMTP id 4ZDf4q2TyFz4x9Pr; Fri, 14 Mar 2025 09:21:31 +0000 (GMT) Received: from epcas2p1.samsung.com ( [182.195.41.53]) by epsmgec2p1.samsung.com (Symantec Messaging Gateway) with SMTP id D9.AC.22938.B15F3D76; Fri, 14 Mar 2025 18:21:31 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas2p3.samsung.com (KnoxPortal) with ESMTPA id 20250314092130epcas2p34e60b23ff983fe03195820a38fb376c5~soOvcsHce2154821548epcas2p3W; Fri, 14 Mar 2025 09:21:30 +0000 (GMT) Received: from epsmgmc1p1new.samsung.com (unknown [182.195.42.40]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20250314092130epsmtrp1de9057981f4c9787b7a5af45f1a110cf~soOvazgVF0533405334epsmtrp1X; Fri, 14 Mar 2025 09:21:30 +0000 (GMT) X-AuditID: b6c32a43-0d1e67000000599a-cc-67d3f51b3aee Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgmc1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 50.73.23488.A15F3D76; Fri, 14 Mar 2025 18:21:30 +0900 (KST) Received: from perf.dsn.sec.samsung.com (unknown [10.229.95.91]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20250314092130epsmtip1f5c58ffeaf0f71b70bea83097dc7db2a~soOvK0vle0080200802epsmtip1K; Fri, 14 Mar 2025 09:21:30 +0000 (GMT) From: Youngmin Nam To: stable@vger.kernel.org Cc: ncardwell@google.com, edumazet@google.com, kuba@kernel.org, davem@davemloft.net, dsahern@kernel.org, pabeni@redhat.com, horms@kernel.org, guo88.liu@samsung.com, yiwang.cai@samsung.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, joonki.min@samsung.com, hajun.sung@samsung.com, d7271.choe@samsung.com, sw.ju@samsung.com, dujeong.lee@samsung.com, ycheng@google.com, yyd@google.com, kuro@kuroa.me, youngmin.nam@samsung.com, cmllamas@google.com, willdeacon@google.com, maennich@google.com, gregkh@google.com, Lorenzo Colitti , Jason Xing Subject: [PATCH 2/2] tcp: fix forever orphan socket caused by tcp_abort Date: Fri, 14 Mar 2025 18:24:46 +0900 Message-Id: <20250314092446.852230-2-youngmin.nam@samsung.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20250314092446.852230-1-youngmin.nam@samsung.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA01Te0xTZxT3673cW4iMu8rgGxipZeB0obRI6QcKvojUbMnY1GVTIzZw0zL6 Wh8G2eYIlMdQ6XCwKY/Zpfhim9SO18BOUgiwEXSjdAYcD0GBKeILEExko9xu87/f+X2/c87v nC+HjXHmiSB2ukpPa1VSBY/wwRva1osigmedMoFtyA/NtPaS6A97CYkqrxtxdKk5j4XGzadw dKdjlETjcwsY+rIUoJyrvRgaNXURyNUyjaGWhq9J9FtDsRdytE2QyNlcSaDa7mmA5uxTJCr8 046jDnMAmuueAsh8eRSgvLEnJCpYuIejmTEXgR515pDI0vqYRLnfXsK3BkvqLvazJD+VD5IS s80gsdV8TkjMxaTkwc8uQlJcVwMkT2xrktn7MjbLaWkareXSqlR1WrpKFs97c3fKjhRRjEAY IYxFYh5XJVXS8bzEt5IjdqYrlqbmcQ9LFYYlKlmq0/EiEzZr1QY9zZWrdfp4Hq1JU2jEGr5O qtQZVDK+itbHCQWCKNGS8FCGvKa/kaXpCc7suibOBpWBRYDNhlQ0/D1XWAR82ByqCUDLcxvG BI8BHM2ZZzHBHIDmiSG8CHgvZ9xrz/eo7AD2uY57glkAa3snvdwqgoqADV2LwN3DnwqCw65N bhqj7uDwZm6mG6+ikuCVGyPAjXEqDC4s9rHc2JdKgDfPVuKMvRBoGYFu2pvaAstsA4CRvAx/ OX0bZ0qGwNz6imULkDrmDQfLzgHGaCK8X1zqxeBV8G5nHcngIPiXKd+DdTB7eMCTbATw1xuT GPOwEZaPFyz7x6j1sLY5kvETCtsHPH1fgoVtz0mG9oWF+RwmMRw+K7V6HKyGLZYLnoISaJ9a 8GI2dRLAYZMZ+wJwy18Yp/yFccr/b2wGWA0IoDU6pYxOjdII//veVLXSBpZPYMOOJtB3ZpHv ACw2cADIxnj+vsjplHF806RHsmitOkVrUNA6BxAt7boEC3olVb10Qyp9ijA6VhAdEyMUR4kE Yl6g78dNRhmHkkn1dAZNa2jtv3kstndQNkt9MiSOn7535zzH7ies/0y7dW3FlXe3HBU+qPpI 8SNltPasORT3gaU29NjQ4HeOjW8ok8SShJQV+151HCgo3B4sOvKJYZthV7j8fkmBIsNu3W4Q qsNn/Vp7BM7uKjzSxJ99e/+pzEznN8NzuxvyQtRjwwcC9zQ+2m+USKzELWvspyMV3g/Pv3O3 +wSRZ5kh+h8e9vdrRE8nz8ovmp4SAfkz7yWVCcP42861dlVdXxmantG9+nxfh9cJ6Hpt1jxR U38LGLnHq0NYnZt00nVZK394/9qz6b/b66qN37dws26ve51zdCJ0RdjVXVnKxK9OHyyLW6zM qz7oNEVf6NvrY4378PKeMzxcJ5cKN2BanfQfKG9d9IsEAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA02Re0hTYRiH+3aO5xyHxnFafs20WBcvpXNl9XVRgyKPFGFQUFbk0sO6OB27 dLFC8a7BKsqa03IiBgotXLYyW8Wxi2llc62lJs1L2cUsUwdDkJwS9N/D7/m9Ly+8FCa4gwup oxlqVpkhTRcRfNzcIgqJFE7YZNHnq0PR+JNOEr23XCJRZUc+jowPCnjoi0GHo8/P+0n0xeXG 0OUrAOU+7sRQ/4VWAtmbRzDUbL5GordmrRfiWoZIZHtQSaDb7SMAuSzDJCr+aMHRc8N85Gof BsjQ0A9QwcAYiYrcP3A0PmAn0OiLXBLVPPlDorxqI745iGms6+IxTfpekjGYNIypvoRgDFqS +fXITjDaxnrAjJlCkqhk/qY0Nv3oCVYpjkvhH6nvusdTvA461fpmXQ6oDCwF3hSkY+CPp4WY hwV0M4Cjv/mz+ULYU2fzmmV/+Cn/6TTzpztjAFqd+TOCoCOhuXUKlAKKCqCF8JN9o6eD0QVe sK8iZ2apP50AHzqcwMM4vQy6p97xPOxLx8Ge2krcMwvpRbDGCT2xNx0Py0zdYPaeOFg1pMNm 637wZfkg7mFsup53twK7CGj9f0r/nzIAXj1YwCpUcpk8VaKQZLAno1RSuUqTIYtKzZSbwMxf I8LugxFXrpgDPApwAFKYKMAX2WwygW+a9HQWq8w8pNSksyoOBFG4KNC3TrJXJqBlUjV7nGUV rPKf5VHewhxe8dZxxty2Ilg8xvpEVHHVuhNrJy5jKdutXF7gyWD1n5FjwysVzuRtU9URjQLm WFTSpLFzVLHnKzF/V2z8wJbV3rFDMtYYtHqhY2lNglxcou67aosd7zPtFpBOn6uZTS2HB2N2 cY/DlndnPZrU+w3FZ6k7yr7f4BznSrb1gfOJjim9xsfr/fbC2p6wsxM3DmbffrVCbgTClvAa ftd+E0lw8msrddbQEHveFUH2h6pbvanusgSN+EyiVoOvsiRGW9bx3c/E1pi5HbGlbeXWl6d2 lHdtyXfNK3rhiP55c/D0nInWijU7C75Jrg+k7Fu8PzwkYMM5v8kDDeuDl2jrdCoRrjoilURg SpX0L7wOt81GAwAA X-CMS-MailID: 20250314092130epcas2p34e60b23ff983fe03195820a38fb376c5 X-Msg-Generator: CA X-Sendblock-Type: AUTO_CONFIDENTIAL CMS-TYPE: 102P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20250314092130epcas2p34e60b23ff983fe03195820a38fb376c5 References: <20250314092446.852230-1-youngmin.nam@samsung.com> X-Patchwork-Delegate: kuba@kernel.org From: Xueming Feng commit bac76cf89816bff06c4ec2f3df97dc34e150a1c4 upstream. We have some problem closing zero-window fin-wait-1 tcp sockets in our environment. This patch come from the investigation. Previously tcp_abort only sends out reset and calls tcp_done when the socket is not SOCK_DEAD, aka orphan. For orphan socket, it will only purging the write queue, but not close the socket and left it to the timer. While purging the write queue, tp->packets_out and sk->sk_write_queue is cleared along the way. However tcp_retransmit_timer have early return based on !tp->packets_out and tcp_probe_timer have early return based on !sk->sk_write_queue. This caused ICSK_TIME_RETRANS and ICSK_TIME_PROBE0 not being resched and socket not being killed by the timers, converting a zero-windowed orphan into a forever orphan. This patch removes the SOCK_DEAD check in tcp_abort, making it send reset to peer and close the socket accordingly. Preventing the timer-less orphan from happening. According to Lorenzo's email in the v1 thread, the check was there to prevent force-closing the same socket twice. That situation is handled by testing for TCP_CLOSE inside lock, and returning -ENOENT if it is already closed. The -ENOENT code comes from the associate patch Lorenzo made for iproute2-ss; link attached below, which also conform to RFC 9293. At the end of the patch, tcp_write_queue_purge(sk) is removed because it was already called in tcp_done_with_error(). p.s. This is the same patch with v2. Resent due to mis-labeled "changes requested" on patchwork.kernel.org. Link: https://patchwork.ozlabs.org/project/netdev/patch/1450773094-7978-3-git-send-email-lorenzo@google.com/ Fixes: c1e64e298b8c ("net: diag: Support destroying TCP sockets.") Signed-off-by: Xueming Feng Tested-by: Lorenzo Colitti Reviewed-by: Jason Xing Reviewed-by: Eric Dumazet Link: https://patch.msgid.link/20240826102327.1461482-1-kuro@kuroa.me Signed-off-by: Jakub Kicinski Cc: # v5.10+ Link: https://lore.kernel.org/lkml/Z9OZS%2Fhc+v5og6%2FU@perf/ [youngmin: Resolved minor conflict in net/ipv4/tcp.c] Signed-off-by: Youngmin Nam --- net/ipv4/tcp.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 9fe164aa185c..ff22060f9145 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -4620,6 +4620,13 @@ int tcp_abort(struct sock *sk, int err) /* Don't race with userspace socket closes such as tcp_close. */ lock_sock(sk); + /* Avoid closing the same socket twice. */ + if (sk->sk_state == TCP_CLOSE) { + if (!has_current_bpf_ctx()) + release_sock(sk); + return -ENOENT; + } + if (sk->sk_state == TCP_LISTEN) { tcp_set_state(sk, TCP_CLOSE); inet_csk_listen_stop(sk); @@ -4629,15 +4636,12 @@ int tcp_abort(struct sock *sk, int err) local_bh_disable(); bh_lock_sock(sk); - if (!sock_flag(sk, SOCK_DEAD)) { - if (tcp_need_reset(sk->sk_state)) - tcp_send_active_reset(sk, GFP_ATOMIC); - tcp_done_with_error(sk, err); - } + if (tcp_need_reset(sk->sk_state)) + tcp_send_active_reset(sk, GFP_ATOMIC); + tcp_done_with_error(sk, err); bh_unlock_sock(sk); local_bh_enable(); - tcp_write_queue_purge(sk); if (!has_current_bpf_ctx()) release_sock(sk); return 0;