From nobody Fri Apr 19 00:36:22 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:ab0:32da:0:0:0:0:0 with SMTP id f26csp798302uao; Thu, 8 Sep 2022 22:50:00 -0700 (PDT) X-Google-Smtp-Source: AA6agR7bByETVjkOG86AkBlOZtQF2a6LiD8l2YJI6oTb6VRrMXmgOzxrCtKNqlFVupQTafYqsDVB X-Received: by 2002:a17:90b:1c01:b0:1f3:2f26:e7b2 with SMTP id oc1-20020a17090b1c0100b001f32f26e7b2mr8080194pjb.111.1662702599958; Thu, 08 Sep 2022 22:49:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662702599; cv=none; d=google.com; s=arc-20160816; b=oyqCktkb+VASP/Svb4JHo1emGgJQTnY+e4wcEO9PjCS+vOQ8PAhJplOHEjpzYsTHFZ SyEdqNdOYt8wOHp70sMCi0a7mgTUBOj0jyZXXHvp5OgYJudv6VdJwOA6xJ25APRQpTCV vEV8ZJCfCQv0sQjzPVCH0OHDjJrr8pdKyfxEEUHKMo3GXJxDs7yJNpYrH+X/wcw288Pt yKN1XJHCDxrxJPAXvj0l4McoqBOgn+ELDk1fOBmseqjBHJ7pZ6wjdAzJuwPrJzqa1+Sv kBTVstx6wkWnOIgC7izKxw2KLCyv357JdT2Hc1bf2A5BMLCVyow7jD5B7Cw5PFymdU80 kzAg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=zObJjur29NGVC1x/vbzekAZIqJVc4Pubf1mrnRS0spo=; b=cl8Hs7f77fIvi83eLZWhNWuhTG2D5sKdVUCH4s2JWEkm2srF7g6zroeqUfmVKlGuDB WwPPoeCJIXf8zbooo7QCABoCensPYZXtZLyINHJoCSUxH53rqU61edAxKtncCHscoGlT Umcnli5aSLVwhej6d0RmOBZvkjIaPQN/vCl76Xh0BE7N5oYufXnRxzGMnTe4NjDgmTTM wpDI95OL2Ll4IdWDInNEzzhE41KFtCHQETNFCxAAhClc154+rriOLhFlcsZvg0S/JIIi ZZNwTy4nhMoOcJ26lsTtpT8akR6gNoVwfwXgfUD5LiIkVsecQlxSegMgk319/801y3kZ CdiA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=a88YNdPU; spf=pass (google.com: domain of mptcp+bounces-6235-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="mptcp+bounces-6235-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id 197-20020a6301ce000000b0041c2c456491si824071pgb.682.2022.09.08.22.49.59 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 08 Sep 2022 22:49:59 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-6235-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=a88YNdPU; spf=pass (google.com: domain of mptcp+bounces-6235-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="mptcp+bounces-6235-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 6DEDD280C6D for ; Fri, 9 Sep 2022 05:49:59 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 630F0652; Fri, 9 Sep 2022 05:49:58 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mail-pj1-f65.google.com (mail-pj1-f65.google.com [209.85.216.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0E644622 for ; Fri, 9 Sep 2022 05:49:56 +0000 (UTC) Received: by mail-pj1-f65.google.com with SMTP id j6-20020a17090a694600b00200bba67dadso542107pjm.5 for ; Thu, 08 Sep 2022 22:49:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=zObJjur29NGVC1x/vbzekAZIqJVc4Pubf1mrnRS0spo=; b=a88YNdPUwydWs+QVIEXU4XO9InrBtdO+7sDNYUboAtMWm8HbnnlKrsdQsbe/RtIC9x D6CVjeg+PBEZ8G3iU2iQ3ekeeVlQruHbUe1JrsMLcGXk1w1yeT829coOGFyFcQs+hQ5K QMMPaxxYzblNl5GTjbj22cNzswSUEO1f5IfOjZsilFEX4yjciWGWC2DLWNRnX/Q5ZyDD wpnDdEGC+aiGhKawhKzPc/Jl0veb39CQaQUIaZrSmVcFA4WIXMu6/ptuP54PsnOoAzRr 3V9Qbv7Z2Ml/cBNJ9m1SAvms0NYSiHqAR+8l31qnbMPejdq73V3LFwXH5zWxh6mC29/b 4zaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=zObJjur29NGVC1x/vbzekAZIqJVc4Pubf1mrnRS0spo=; b=6q0kuyoN0M+1YsZtiDdgisEzmSHYMjIq2i8igNumFN95XfMxXsZ48ILC9kCgpI+ioj 7si+jNcSrQ385Zj9R0naxqTepcDjqgPMUkS93qf85WVudA03SMi5loYvR0AgiX/3CFE4 NYN6HZDGU9wnjFZc1XYcO8xaRFf3iEKew6ndE/ZaAE3k0PihfURjExILT5m9BeEVQrlF 5Rt/TTzvvlCf6UJTGzMQqEoAmEwwn0MNPQcsPVxNbo5oBpzMb0/2TugGaHckgtuJ3+4T /r2I8Y+O+9U6sh80UYMTNs1oco9gj7W5nsavNUw120bpXKANLsz12/uN9OcM2pP+dm1s XXrA== X-Gm-Message-State: ACgBeo36+rekq5xW6Ra4U6ObDPe19AVwWhcKrvB4ycYibYOSuU1uLJwB rVMCMYaEIuVeOeEHn1ZgYjtQT8evees= X-Received: by 2002:a17:90a:d50b:b0:200:76c6:9cef with SMTP id t11-20020a17090ad50b00b0020076c69cefmr8103145pju.232.1662702596478; Thu, 08 Sep 2022 22:49:56 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.12]) by smtp.gmail.com with ESMTPSA id d3-20020a170903230300b0016cf3f124e1sm492646plh.234.2022.09.08.22.49.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Sep 2022 22:49:56 -0700 (PDT) From: menglong8.dong@gmail.com X-Google-Original-From: imagedong@tencent.com To: pabeni@redhat.com Cc: mptcp@lists.linux.dev, Menglong Dong , Jiang Biao , Mengen Sun Subject: [PATCH net v4 1/3] net: mptcp: factor out __mptcp_close() without socket lock Date: Fri, 9 Sep 2022 13:49:30 +0800 Message-Id: <20220909054932.246221-2-imagedong@tencent.com> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220909054932.246221-1-imagedong@tencent.com> References: <20220909054932.246221-1-imagedong@tencent.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Menglong Dong Factor out __mptcp_close() from mptcp_close(). The caller of __mptcp_close() should hold the socket lock, and cancel mptcp work when __mptcp_close() return true. This function will be used in the next commit. Reviewed-by: Jiang Biao Reviewed-by: Mengen Sun Signed-off-by: Menglong Dong --- net/mptcp/protocol.c | 19 ++++++++++++++----- net/mptcp/protocol.h | 1 + 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index d398f3810662..1cfb4f1ff4e4 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2796,13 +2796,12 @@ static void __mptcp_destroy_sock(struct sock *sk) sock_put(sk); } =20 -static void mptcp_close(struct sock *sk, long timeout) +bool __mptcp_close(struct sock *sk, long timeout) { struct mptcp_subflow_context *subflow; struct mptcp_sock *msk =3D mptcp_sk(sk); bool do_cancel_work =3D false; =20 - lock_sock(sk); sk->sk_shutdown =3D SHUTDOWN_MASK; =20 if ((1 << sk->sk_state) & (TCPF_LISTEN | TCPF_CLOSE)) { @@ -2833,7 +2832,6 @@ static void mptcp_close(struct sock *sk, long timeout) } sock_orphan(sk); =20 - sock_hold(sk); pr_debug("msk=3D%p state=3D%d", sk, sk->sk_state); if (mptcp_sk(sk)->token) mptcp_event(MPTCP_EVENT_CLOSED, msk, NULL, GFP_KERNEL); @@ -2844,10 +2842,21 @@ static void mptcp_close(struct sock *sk, long timeo= ut) } else { mptcp_reset_timeout(msk, 0); } + + return do_cancel_work; +} + +static void mptcp_close(struct sock *sk, long timeout) +{ + bool cancel_work; + + sock_hold(sk); + lock_sock(sk); + + cancel_work =3D __mptcp_close(sk, timeout); release_sock(sk); - if (do_cancel_work) + if (cancel_work) mptcp_cancel_work(sk); - sock_put(sk); } =20 diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 132d50833df1..8f123d450c76 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -612,6 +612,7 @@ void mptcp_subflow_reset(struct sock *ssk); void mptcp_subflow_queue_clean(struct sock *ssk); void mptcp_sock_graft(struct sock *sk, struct socket *parent); struct socket *__mptcp_nmpc_socket(const struct mptcp_sock *msk); +bool __mptcp_close(struct sock *sk, long timeout); =20 bool mptcp_addresses_equal(const struct mptcp_addr_info *a, const struct mptcp_addr_info *b, bool use_port); --=20 2.37.2 From nobody Fri Apr 19 00:36:22 2024 Received: from mail-pg1-f196.google.com (mail-pg1-f196.google.com [209.85.215.196]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C23E4622 for ; Fri, 9 Sep 2022 05:49:58 +0000 (UTC) Received: by mail-pg1-f196.google.com with SMTP id 78so583622pgb.13 for ; Thu, 08 Sep 2022 22:49:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=Od8vlbvdGvw6tFFE7lFBLFduZJ5kHFM8WxOulBUpwq8=; b=BHOgpfwFyzMueB1W/8/vwU6DN4Vr7KSEXqWBurthSJAxxF4HeVCeBtRcSb9DwHkz+U syfA0d2fLBLKD8lW78dPVF/Bl5QPWCbo4vtR+2IXx+ZE8/8mScmFXW1tfPEUMH2I0hBl TLpycTxpLmDWqWXAtGNjUu2KCW0uxF17hkvvHW7+y5ZQEftmxhEUSXOpxjE72PV6P29e YO1uG6D4Yg+4rysBIn6zxvPMrconVlEvWFbzIeMU0CEYM+B5cVCu8QkHtkdkoeKWciLz Qd+aZLixm2nPZtdOj3XpNKFxRXONfMVRVhAHnVOZjPaJJjEQV0+IBpFTdUHSjveR55vC tPmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=Od8vlbvdGvw6tFFE7lFBLFduZJ5kHFM8WxOulBUpwq8=; b=R7lsTYRSe763M9TgR78zfEz6ZkK9Ch8D5Wz6I//PjKWxVaVsQcj3IMTrpnIfuI8+Cg /4NZm8tWt8wp61RVJovbR++1+dfmaiyPBve+2jo79zF+w2wT4gDPDBd5GaLr7kXEe6JB XYvYgrZOEj4HLPYZnyGFLN8kR680XbB0/DsE/FDODSs675v/NueEAVF4lSCiWtzuVNA+ R3yWG4FNuRUyloo9qJZkXnF1ZLOcN4r5LFtErYQ1pncigdoerLBmuvqDM7LjhKdv6Q3v FR+lIN4421HBWa+jDZrUdViWtQZ91hTsjNXnxU/xyvkw/IYBytrwXZs1frkT80N4DsMw B0tw== X-Gm-Message-State: ACgBeo0HIgGU2GPrKmEzGO5w3xIf4FhfsZAhLetoT0SVpnAYZLbWPPMB 1nb5Toi9JVAzMjEJn++8yzsM6osmjMs= X-Google-Smtp-Source: AA6agR7bYHk/e+STqtwTzovJUg7diI3QX+VlKkuKAVjBGvvUKmBgkYUvd7VE7TladquNChfpC8p+2g== X-Received: by 2002:a05:6a00:174b:b0:52f:c4d1:d12d with SMTP id j11-20020a056a00174b00b0052fc4d1d12dmr12411565pfc.41.1662702598284; Thu, 08 Sep 2022 22:49:58 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.12]) by smtp.gmail.com with ESMTPSA id d3-20020a170903230300b0016cf3f124e1sm492646plh.234.2022.09.08.22.49.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Sep 2022 22:49:58 -0700 (PDT) From: menglong8.dong@gmail.com X-Google-Original-From: imagedong@tencent.com To: pabeni@redhat.com Cc: mptcp@lists.linux.dev, Menglong Dong , Jiang Biao , Mengen Sun Subject: [PATCH net v4 2/3] net: mptcp: move mptcp_cancel_work() to protocol.h Date: Fri, 9 Sep 2022 13:49:31 +0800 Message-Id: <20220909054932.246221-3-imagedong@tencent.com> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220909054932.246221-1-imagedong@tencent.com> References: <20220909054932.246221-1-imagedong@tencent.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Menglong Dong mptcp_cancel_work() is simple enough and we can make it as inline and move it to protocol.h. mptcp_cancel_work() will be used in subflow.c in the next commit. Reviewed-by: Jiang Biao Reviewed-by: Mengen Sun Signed-off-by: Menglong Dong --- net/mptcp/protocol.c | 8 -------- net/mptcp/protocol.h | 8 ++++++++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 1cfb4f1ff4e4..d6eb033e93b9 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2656,14 +2656,6 @@ static void __mptcp_clear_xmit(struct sock *sk) dfrag_clear(sk, dfrag); } =20 -static void mptcp_cancel_work(struct sock *sk) -{ - struct mptcp_sock *msk =3D mptcp_sk(sk); - - if (cancel_work_sync(&msk->work)) - __sock_put(sk); -} - void mptcp_subflow_shutdown(struct sock *sk, struct sock *ssk, int how) { lock_sock(ssk); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 8f123d450c76..9de891373959 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -378,6 +378,14 @@ static inline struct mptcp_data_frag *mptcp_rtx_head(c= onst struct sock *sk) return list_first_entry_or_null(&msk->rtx_queue, struct mptcp_data_frag, = list); } =20 +static inline void mptcp_cancel_work(struct sock *sk) +{ + struct mptcp_sock *msk =3D mptcp_sk(sk); + + if (cancel_work_sync(&msk->work)) + __sock_put(sk); +} + struct csum_pseudo_header { __be64 data_seq; __be32 subflow_seq; --=20 2.37.2 From nobody Fri Apr 19 00:36:22 2024 Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 94783622 for ; Fri, 9 Sep 2022 05:50:00 +0000 (UTC) Received: by mail-pf1-f194.google.com with SMTP id 65so722474pfx.0 for ; Thu, 08 Sep 2022 22:50:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=hxOsQXqYB5p3LBql73gLnoT0HiWgd6JDTJpeO12YlMY=; b=akEJj8ZEHC5X6GlIK0/sFBtU6Bm2TfC0wUeYq15rP0iyBQdojislHOXGDMtqF7pAqd WPi5w70FyNd97gHMEAIeJssH5PwsZ76SZLmoFx+pUT9gfYlwPcNcuWyQ/F7Inpb2OuZJ eT54O4tr/9sxUIyFKJO3vvM6K9dShm/Y3lLVvLQ3VuMoYEVe3H+fwz3anOWqiiSoaLOB vdTp3ufkqjI2WvMyMui8P9BpstRTYt4brjXLL4Y2oGlBJieepyTpquCjh/SiGg3b9fSo ZaBRByAyYDb/wfig6/gJxJA8hh1GTW2mIgccATNb3wpGGIXpK/HcZlx9SLCrt54SJEMT 5T3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=hxOsQXqYB5p3LBql73gLnoT0HiWgd6JDTJpeO12YlMY=; b=RZtocw8EbwB+xvHmPzz+iIqWuJhIRN18HuPnwx+fPyEcN7ZjbCRUbDE7oKTkGhzlzi DBEFseh/qTUvWMjEQjInjyCxZyM4U5v4Hg8mxv0305diExWMb46HJjoUhmZYAxwxI2Az ZaMQ8Oo749uFIEvcs0lqPw8i9omtXjHuP+jk4wycY3oRVCKcviRRlBpZ7hSuoH6+5jz5 0eCbAz/40sdi8qbwMhvu5B9qupBv76Rgc7HP7AbTQFoG+I1Rg+U6XT1Yprmm/orAoy5W L8RSxTTKJZwNKZ9Zfxq528/bii8DCynIEDwmZSkTMj6j8ueox07b+lCl+r4lpaOod5Ly GlLA== X-Gm-Message-State: ACgBeo2WGo2swgxhOmx3s7u5h7DP/eoKOd1XCBoYviT3+gTHPKEnk6Ux PzSPoMwEiirL4E087BFkuEY= X-Google-Smtp-Source: AA6agR7WYOJxbiAGW7kULNHVTQgnaJbR8BfTmOBdWzn66t476h/jZpzwkOl7VISJBm7TIo1wvShGUg== X-Received: by 2002:a05:6a00:8cc:b0:52c:7ab5:2ce7 with SMTP id s12-20020a056a0008cc00b0052c7ab52ce7mr12350017pfu.28.1662702600070; Thu, 08 Sep 2022 22:50:00 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.12]) by smtp.gmail.com with ESMTPSA id d3-20020a170903230300b0016cf3f124e1sm492646plh.234.2022.09.08.22.49.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Sep 2022 22:49:59 -0700 (PDT) From: menglong8.dong@gmail.com X-Google-Original-From: imagedong@tencent.com To: pabeni@redhat.com Cc: mptcp@lists.linux.dev, Menglong Dong , Jiang Biao , Mengen Sun Subject: [PATCH net v4 3/3] net: mptcp: fix unreleased socket in accept queue Date: Fri, 9 Sep 2022 13:49:32 +0800 Message-Id: <20220909054932.246221-4-imagedong@tencent.com> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220909054932.246221-1-imagedong@tencent.com> References: <20220909054932.246221-1-imagedong@tencent.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Menglong Dong The mptcp socket and its subflow sockets in accept queue can't be released after the process exit. While the release of a mptcp socket in listening state, the corresponding tcp socket will be released too. Meanwhile, the tcp socket in the unaccept queue will be released too. However, only init subflow is in the unaccept queue, and the joined subflow is not in the unaccept queue, which makes the joined subflow won't be released, and therefore the corresponding unaccepted mptcp socket will not be released to. This can be reproduced easily with following steps: 1. create 2 namespace and veth: $ ip netns add mptcp-client $ ip netns add mptcp-server $ sysctl -w net.ipv4.conf.all.rp_filter=3D0 $ ip netns exec mptcp-client sysctl -w net.mptcp.enabled=3D1 $ ip netns exec mptcp-server sysctl -w net.mptcp.enabled=3D1 $ ip link add red-client netns mptcp-client type veth peer red-server \ netns mptcp-server $ ip -n mptcp-server address add 10.0.0.1/24 dev red-server $ ip -n mptcp-server address add 192.168.0.1/24 dev red-server $ ip -n mptcp-client address add 10.0.0.2/24 dev red-client $ ip -n mptcp-client address add 192.168.0.2/24 dev red-client $ ip -n mptcp-server link set red-server up $ ip -n mptcp-client link set red-client up 2. configure the endpoint and limit for client and server: $ ip -n mptcp-server mptcp endpoint flush $ ip -n mptcp-server mptcp limits set subflow 2 add_addr_accepted 2 $ ip -n mptcp-client mptcp endpoint flush $ ip -n mptcp-client mptcp limits set subflow 2 add_addr_accepted 2 $ ip -n mptcp-client mptcp endpoint add 192.168.0.2 dev red-client id \ 1 subflow 3. listen and accept on a port, such as 9999. The nc command we used here is modified, which makes it use mptcp protocol by default. $ ip netns exec mptcp-server nc -l -k -p 9999 4. open another *two* terminal and use each of them to connect to the server with the following command: $ ip netns exec mptcp-client nc 10.0.0.1 9999 Input something after connect to triger the connection of the second subflow. So that there are two established mptcp connections, with the second one still unaccepted. 5. exit all the nc command, and check the tcp socket in server namespace. And you will find that there is one tcp socket in CLOSE_WAIT state and can't release forever. Fix this by closing all of the unaccepted mptcp socket in mptcp_subflow_queue_clean() with __mptcp_close(). Now, we can ensure that all unaccepted mptcp sockets will be cleaned by __mptcp_close() before they are released, so mptcp_sock_destruct(), which is used to clean the unaccepted mptcp socket, is not needed anymore. The selftests for mptcp is ran for this commit, and no new failures. Fixes: f296234c98a8 ("mptcp: Add handling of incoming MP_JOIN requests") Reviewed-by: Jiang Biao Reviewed-by: Mengen Sun Signed-off-by: Menglong Dong --- v4: - factor-out __mptcp_close() and use it in this commit. v3: - remove mptcp_close_nolock() and call mptcp_close() directly in mptcp_subflow_queue_clean(), as mptcp_close_nolock() will cause dead lock. v2: - remove mptcp_sock_destruct() - introduce mptcp_close_nolock() and replace mptcp_close() with it in mptcp_subflow_queue_clean() --- net/mptcp/subflow.c | 37 +++++++++++-------------------------- 1 file changed, 11 insertions(+), 26 deletions(-) diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index c7d49fb6e7bd..7c437debc368 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -602,30 +602,6 @@ static bool subflow_hmac_valid(const struct request_so= ck *req, return !crypto_memneq(hmac, mp_opt->hmac, MPTCPOPT_HMAC_LEN); } =20 -static void mptcp_sock_destruct(struct sock *sk) -{ - /* if new mptcp socket isn't accepted, it is free'd - * from the tcp listener sockets request queue, linked - * from req->sk. The tcp socket is released. - * This calls the ULP release function which will - * also remove the mptcp socket, via - * sock_put(ctx->conn). - * - * Problem is that the mptcp socket will be in - * ESTABLISHED state and will not have the SOCK_DEAD flag. - * Both result in warnings from inet_sock_destruct. - */ - if ((1 << sk->sk_state) & (TCPF_ESTABLISHED | TCPF_CLOSE_WAIT)) { - sk->sk_state =3D TCP_CLOSE; - WARN_ON_ONCE(sk->sk_socket); - sock_orphan(sk); - } - - /* We don't need to clear msk->subflow, as it's still NULL at this point = */ - mptcp_destroy_common(mptcp_sk(sk), 0); - inet_sock_destruct(sk); -} - static void mptcp_force_close(struct sock *sk) { /* the msk is not yet exposed to user-space */ @@ -768,7 +744,6 @@ static struct sock *subflow_syn_recv_sock(const struct = sock *sk, /* new mpc subflow takes ownership of the newly * created mptcp socket */ - new_msk->sk_destruct =3D mptcp_sock_destruct; mptcp_sk(new_msk)->setsockopt_seq =3D ctx->setsockopt_seq; mptcp_pm_new_connection(mptcp_sk(new_msk), child, 1); mptcp_token_accept(subflow_req, mptcp_sk(new_msk)); @@ -1763,13 +1738,23 @@ void mptcp_subflow_queue_clean(struct sock *listene= r_ssk) =20 for (msk =3D head; msk; msk =3D next) { struct sock *sk =3D (struct sock *)msk; - bool slow; + bool slow, cancel_work; =20 + sock_hold(sk); slow =3D lock_sock_fast_nested(sk); next =3D msk->dl_next; msk->first =3D NULL; msk->dl_next =3D NULL; + + /* __mptcp_close() will put a extra reference on sk, + * so we hold one here. + */ + sock_hold(sk); + cancel_work =3D __mptcp_close(sk, 0); unlock_sock_fast(sk, slow); + if (cancel_work) + mptcp_cancel_work(sk); + sock_put(sk); } =20 /* we are still under the listener msk socket lock */ --=20 2.37.2