From nobody Thu Apr 18 02:46:03 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:cbb9:0:0:0:0:0 with SMTP id v25csp780980jap; Thu, 11 Nov 2021 08:21:56 -0800 (PST) X-Google-Smtp-Source: ABdhPJwfsLl0bSRemLN42euW13N1cjX+M5hIkWOWeI9Pr3aIqbrlEWtRSR5/jKi4j+88S3g10NKb X-Received: by 2002:a17:903:2091:b0:142:8567:e794 with SMTP id d17-20020a170903209100b001428567e794mr326575plc.50.1636647716293; Thu, 11 Nov 2021 08:21:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636647716; cv=none; d=google.com; s=arc-20160816; b=ja0K6G2sSm1xny7I3c+9N8Tjtl1Axv7f0a+7uCbCvgU9iTQc9WJLMiKLSemoBnwoE1 li9MxpJEgrTjO7vd/681dg94qkYmoMwphkCdXg1U2vUKeLkpstzZNohvIf6ERHzPnICy QsB20NlQS1uChXZThJ82Tyt3JS1s1+VW8z1kNYgtqUjTIINGO/O9+aNVsxrrdVIikdYV FlZ2HINhTiQMus6CUdeHSKdnC5kkvCcZ/ZYJMyQa4iBNy8gvR3aVtXgdPQVHxnXLW3kp KKgfX8yh4XlG0uUNJp19RZVcvA50RZrBmWjHHOyvM4RgDciJ9B+WTPd+mjpDnENDJ0bD YSgQ== 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:to:from:dkim-signature; bh=I4a/qbwOJYGo2JNdZdSHQulKDUGsFZfQ8BnGelwBCrE=; b=VCkwX4j4UV+LRDMhieFf/1RusZBEkTWs2pZfqsrywMi2h2piu+uM4xARl5wIb5wSF4 E7c4PmZz9790n9bxat1w7dNZiUMmf1ep+TPAdmHHT0e2K2c43m55EE7EtSEYgJ+99DMJ HVkTFpRBV1ga6HVuQpwzxil3eUrpkKC3Z7yfsPI33cN1cJ68z5l73hF7q4JuTj1nK5+q kOsSdvlzh/g+5x/jilUFYyIntmxH7tjWpAHIh9JR5pQ7HKkgSuu/4AUVN7qovDxDq+oL o45PX8sxsOdGwMIxVTHLKhDHkgxeb7byZVz1GsHPi9NtKvDpMsHZNU1KIi0JPW0Jowst Kx4g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=bwEMXT9M; spf=pass (google.com: domain of mptcp+bounces-2421-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-2421-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from sjc.edge.kernel.org (sjc.edge.kernel.org. [147.75.69.165]) by mx.google.com with ESMTPS id u16si2414440plh.46.2021.11.11.08.21.56 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Nov 2021 08:21:56 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2421-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) client-ip=147.75.69.165; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=bwEMXT9M; spf=pass (google.com: domain of mptcp+bounces-2421-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-2421-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.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 sjc.edge.kernel.org (Postfix) with ESMTPS id E93603E0F6E for ; Thu, 11 Nov 2021 16:21:55 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B5CD82C85; Thu, 11 Nov 2021 16:21:54 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (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 7E4F92C82 for ; Thu, 11 Nov 2021 16:21:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1636647712; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=I4a/qbwOJYGo2JNdZdSHQulKDUGsFZfQ8BnGelwBCrE=; b=bwEMXT9Mc9mv0VwohcQ/pl3iapxUYrgSkA6ZRAQtOSoqeUuZmlaaJdag9DD9C6MEFXlBw7 S1pMf237HaTlO31+hzsR1h+OEyVBQNyzA6euyA7PlE2+/EVZiSAh2e5t1dsPItlTsryshb wjMSLX7/Aq5FEK+69GE+qlmPmiSuP8U= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-356-Eh0ir2j6MSapxYpqB8tujA-1; Thu, 11 Nov 2021 11:21:51 -0500 X-MC-Unique: Eh0ir2j6MSapxYpqB8tujA-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 8DDE91006AA0 for ; Thu, 11 Nov 2021 16:21:50 +0000 (UTC) Received: from gerbillo.fritz.box (unknown [10.39.194.197]) by smtp.corp.redhat.com (Postfix) with ESMTP id F03175D6B1 for ; Thu, 11 Nov 2021 16:21:49 +0000 (UTC) From: Paolo Abeni To: mptcp@lists.linux.dev Subject: [PATCH v2 mptcp-next 1/7] mptcp: keep snd_una updated for fallback socket Date: Thu, 11 Nov 2021 17:21:36 +0100 Message-Id: <6266a63f37bccd9d6f791a62417cdb227eb3910d.1636647623.git.pabeni@redhat.com> In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=pabeni@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" After shutdown, for fallback MPTCP sockets, we always have write_seq =3D=3D snd_una+1 The above will foul OUTQ ioctl(). Keep snd_una in sync with write_seq even after shutdown. Signed-off-by: Paolo Abeni Reviewed-by: Mat Martineau --- net/mptcp/protocol.c | 1 + 1 file changed, 1 insertion(+) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 29b6f57b917e..3fef1b4e7780 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2690,6 +2690,7 @@ static void __mptcp_check_send_data_fin(struct sock *= sk) * state now */ if (__mptcp_check_fallback(msk)) { + WRITE_ONCE(msk->snd_una, msk->write_seq); if ((1 << sk->sk_state) & (TCPF_CLOSING | TCPF_LAST_ACK)) { inet_sk_state_store(sk, TCP_CLOSE); mptcp_close_wake_up(sk); --=20 2.33.1 From nobody Thu Apr 18 02:46:03 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:cbb9:0:0:0:0:0 with SMTP id v25csp781021jap; Thu, 11 Nov 2021 08:21:58 -0800 (PST) X-Google-Smtp-Source: ABdhPJwZ9JG5vSVpe6gmC+iGzvxvbct/WoRnwE4xfZViMvzrdZJwq1KkHaYwvgSB1/kyk5LiKTqH X-Received: by 2002:a17:902:ec8f:b0:142:11aa:3974 with SMTP id x15-20020a170902ec8f00b0014211aa3974mr157720plg.30.1636647718645; Thu, 11 Nov 2021 08:21:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636647718; cv=none; d=google.com; s=arc-20160816; b=GqoLg8/bkHTMZJY4rifYqbOV4TgW7axWHSIlLEBlgPs3u5gVyyTK+WbRLf6CJZ9I22 +9XptNkvvrJ6KM+jTH04wfgFrlcyB98NNZSp5T1dMNZTzVS8tKoKXaJu0kCV3vS8kjCA NpmWBfbcTlL+gcyiQLQiy4VYofkpZtOwzAslkBGMzBcYAeNswJND7p6jR9cehsauF7aG MjF6/nYb5cHoXKhZrJeaMUD3Uu1zCDGJoF6ynzE46VTrcVq4gpD1ZdtSOyOMT9mFa+Kn qzE6WTFFU86O0SzcJZRV+x2uB9sVd6P5va808NoW/uFt1gnzsG1mz5aeW4/CzKP+iYjN xACQ== 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:to:from:dkim-signature; bh=whhtw1wtO2TwCb5lOlSeMmrnWekTycE0TPNqmlGOwCo=; b=il+mZtCqm9BZbccv16NFiuEsK+CByrSYJTgbqgf7afGdC7Ha9Aav/WxW0Xv6Mnhbck JN5rGXoLIqvk9dKdFqfS811R8wby/dhBIjPHxyuirkZ+eJwivMSgZUB+sIjHDB/xJEIU tJbL8AOcMp7qfKP4ghf+BZohVY0mEw+5w4Dob6Ebm2pO5Or/73lt1JEMqf/y+o7ev0Ym PlSVemEl897cYi3xH6s3nSop2C0rnh6zW3wEgFANhqXeux37zWKWyUQuMA4KgqDOKiQ2 p7ITlamHABCvso2K2N2pUaNpam19pn6t/AEvFdDNgl8auLIwPQvsTn13CslvJ9oPYK7B urRQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=bIQDdpxu; spf=pass (google.com: domain of mptcp+bounces-2423-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2423-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from sjc.edge.kernel.org (sjc.edge.kernel.org. [2604:1380:1000:8100::1]) by mx.google.com with ESMTPS id nl5si6658218pjb.94.2021.11.11.08.21.58 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Nov 2021 08:21:58 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2423-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) client-ip=2604:1380:1000:8100::1; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=bIQDdpxu; spf=pass (google.com: domain of mptcp+bounces-2423-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2423-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.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 sjc.edge.kernel.org (Postfix) with ESMTPS id 4D1303E0F71 for ; Thu, 11 Nov 2021 16:21:58 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 92EC42C86; Thu, 11 Nov 2021 16:21:55 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (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 86C002C83 for ; Thu, 11 Nov 2021 16:21:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1636647713; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=whhtw1wtO2TwCb5lOlSeMmrnWekTycE0TPNqmlGOwCo=; b=bIQDdpxuJysJXRIERo3C9v8m2IAVtzmc3yoxgs+9Z8ejAQD9UG8rfcnLk7yvIsyJXwk8b4 zsmhyhp89mMhXvE0CcfC0AIlom4aMI7tPHqaP/LEz+gE/yQ0bJDBqP1tHkhLaaQh1rcLbE dM0yE8ygrH1WcN2nGUz+EndNnZ5rwsw= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-448-XAfjWAFHNsy2SYQnu3cJVw-1; Thu, 11 Nov 2021 11:21:52 -0500 X-MC-Unique: XAfjWAFHNsy2SYQnu3cJVw-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 8452081C85D for ; Thu, 11 Nov 2021 16:21:51 +0000 (UTC) Received: from gerbillo.fritz.box (unknown [10.39.194.197]) by smtp.corp.redhat.com (Postfix) with ESMTP id E6C1A5D6B1 for ; Thu, 11 Nov 2021 16:21:50 +0000 (UTC) From: Paolo Abeni To: mptcp@lists.linux.dev Subject: [PATCH v2 mptcp-next 2/7] mptcp: never allow the PM to close a listener subflow Date: Thu, 11 Nov 2021 17:21:37 +0100 Message-Id: In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=pabeni@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently, when deleting an endpoint the netlink PM treverses all the local MPTCP sockets, regardless of their status. If an MPTCP listener socket is bound to the IP matching the delete endpoint, the listener TCP socket will be closed. That is unexpected, the PM should only affect data subflows. Fix the issue explicitly skipping MPTCP socket in TCP_LISTEN status. Signed-off-by: Paolo Abeni Reviewed-by: Mat Martineau --- net/mptcp/pm_netlink.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 7b96be1e9f14..f523051f5aef 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -700,6 +700,9 @@ static void mptcp_pm_nl_rm_addr_or_subflow(struct mptcp= _sock *msk, =20 msk_owned_by_me(msk); =20 + if (sk->sk_state =3D=3D TCP_LISTEN) + return; + if (!rm_list->nr) return; =20 --=20 2.33.1 From nobody Thu Apr 18 02:46:03 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:cbb9:0:0:0:0:0 with SMTP id v25csp781045jap; Thu, 11 Nov 2021 08:22:00 -0800 (PST) X-Google-Smtp-Source: ABdhPJy4i2jyf5XLAcTr/px/1fxv12FQFAIAhNOuKy3ycaBSfdGKq5+MriOx/76cTu/OMvENVg6y X-Received: by 2002:a17:90b:4f4c:: with SMTP id pj12mr27792291pjb.218.1636647719802; Thu, 11 Nov 2021 08:21:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636647719; cv=none; d=google.com; s=arc-20160816; b=oheunV64I35ADQPtcWPks29NhjXh8wgCGwO/ALACMGwi6ODIDDAST6r8+H92cTxwHB wGCKf1LuQSrkrWi1mirC9RIjdIoLXmN4HciTXWdSnHg04n54YnXMO1nmahbQf5eeqCT/ 7Ts7a4s7ARHqG2a1wi1y1YRJe41DmirT0YZ9ayLbJ6ZZhcAhffWUBL+C9IAtZrIPtde9 q7jb0gMqZddgVExiGImlO5CVXt+IUZO9/q0py29S53A8KdU4w06Ra5Dhhj7dRiYn8RYV IvR8pOyNr1+bsTNNWYQs2PkblmMEwsdf3FqZB3UAMp8C1SUkUj4ipYXdwQ5Hq98wplg4 iRLg== 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:to:from:dkim-signature; bh=2vrRq51JyO0I8j9iK839of93i0SLamlXsDgfHfpob7Q=; b=u70Z2c+mUlVC+iWvFdr6D7ApiDTcYDBahGKwZ/MQFJn7oixYB2HWElhbGxGTPTAxyw cbKlIiF9sbooIAk1Q/wOaOMbIgPXRAe+hLAla6C/PqYksD5s6XHIT0Gq+y6lvHmXZAwB rEh1r2Z5XNTz1i7s/HEBBM2QEuUB+4xMlyeoBrT9hhBA05Z4nPmIS7DwQH/ZI4jC6Ud7 OUNozj38BnEJ47Uq+ACUEnhE5Zopp7y+hT/t9KitWt23TU5E2WafbS9yT5nMkbOVG3te 84mgO+UPoRP9abuxvqabg5qBYuDufgj9U3DyviO1uw3cZBuZ8iiF1mFv+9y4tItKGInH nFEA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Kl2Sd0ra; spf=pass (google.com: domain of mptcp+bounces-2424-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2424-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from sjc.edge.kernel.org (sjc.edge.kernel.org. [2604:1380:1000:8100::1]) by mx.google.com with ESMTPS id nl5si6658218pjb.94.2021.11.11.08.21.59 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Nov 2021 08:21:59 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2424-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) client-ip=2604:1380:1000:8100::1; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Kl2Sd0ra; spf=pass (google.com: domain of mptcp+bounces-2424-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1000:8100::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2424-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.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 sjc.edge.kernel.org (Postfix) with ESMTPS id 80AE23E1041 for ; Thu, 11 Nov 2021 16:21:59 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DC3192C83; Thu, 11 Nov 2021 16:21:56 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (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 6365A2C81 for ; Thu, 11 Nov 2021 16:21:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1636647714; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=2vrRq51JyO0I8j9iK839of93i0SLamlXsDgfHfpob7Q=; b=Kl2Sd0ra7MkDIar8HG1l1yVVj7uZVBnT4+3KqYdQFAMLTEVlJICURLnTZ9CV6ejMmajv7k vEQXNRQlAERcgWHSE0C+7aiNHyGF6CBlfbTY36fAIl1PHvkQfMGI1O5EyL09vHagVc+4xx 7nCA5eqxImi+K5PoB5J4kIxvfeHjFF4= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-225-h5ZZPpO_MKOmTv6QrjlFEw-1; Thu, 11 Nov 2021 11:21:53 -0500 X-MC-Unique: h5ZZPpO_MKOmTv6QrjlFEw-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 7F9E887D542 for ; Thu, 11 Nov 2021 16:21:52 +0000 (UTC) Received: from gerbillo.fritz.box (unknown [10.39.194.197]) by smtp.corp.redhat.com (Postfix) with ESMTP id DF01F5D6D7 for ; Thu, 11 Nov 2021 16:21:51 +0000 (UTC) From: Paolo Abeni To: mptcp@lists.linux.dev Subject: [PATCH v2 mptcp-next 3/7] mptcp: implement fastclose xmit path Date: Thu, 11 Nov 2021 17:21:38 +0100 Message-Id: <4955d076f71b1890678734681af02050d68e5925.1636647623.git.pabeni@redhat.com> In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=pabeni@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allow the MPTCP xmit path to add MP_FASTCLOSE suboption on RST egress packets. Additionally reorder related options writing to reduce the number of conditionals required in the fast path. Signed-off-by: Paolo Abeni Reviewed-by: Mat Martineau --- net/mptcp/options.c | 57 +++++++++++++++++++++++++++++++------------- net/mptcp/protocol.h | 1 + 2 files changed, 42 insertions(+), 16 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 68a9a1c79200..8a1020e4285c 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -768,6 +768,28 @@ static noinline bool mptcp_established_options_rst(str= uct sock *sk, struct sk_bu return true; } =20 +static bool mptcp_established_options_fastclose(struct sock *sk, + unsigned int *size, + unsigned int remaining, + struct mptcp_out_options *opts) +{ + struct mptcp_subflow_context *subflow =3D mptcp_subflow_ctx(sk); + struct mptcp_sock *msk =3D mptcp_sk(subflow->conn); + + if (likely(!subflow->send_fastclose)) + return false; + + if (remaining < TCPOLEN_MPTCP_FASTCLOSE) + return false; + + *size =3D TCPOLEN_MPTCP_FASTCLOSE; + opts->suboptions |=3D OPTION_MPTCP_FASTCLOSE; + opts->rcvr_key =3D msk->remote_key; + + pr_debug("FASTCLOSE key=3D%llu", opts->rcvr_key); + return true; +} + static bool mptcp_established_options_mp_fail(struct sock *sk, unsigned int *size, unsigned int remaining, @@ -806,11 +828,9 @@ bool mptcp_established_options(struct sock *sk, struct= sk_buff *skb, return false; =20 if (unlikely(skb && TCP_SKB_CB(skb)->tcp_flags & TCPHDR_RST)) { - if (mptcp_established_options_mp_fail(sk, &opt_size, remaining, opts)) { - *size +=3D opt_size; - remaining -=3D opt_size; - } - if (mptcp_established_options_rst(sk, skb, &opt_size, remaining, opts)) { + if (mptcp_established_options_fastclose(sk, &opt_size, remaining, opts) = || + mptcp_established_options_mp_fail(sk, &opt_size, remaining, opts) || + mptcp_established_options_rst(sk, skb, &opt_size, remaining, opts)) { *size +=3D opt_size; remaining -=3D opt_size; } @@ -1251,17 +1271,8 @@ void mptcp_write_options(__be32 *ptr, const struct t= cp_sock *tp, ptr +=3D 2; } =20 - /* RST is mutually exclusive with everything else */ - if (unlikely(OPTION_MPTCP_RST & opts->suboptions)) { - *ptr++ =3D mptcp_option(MPTCPOPT_RST, - TCPOLEN_MPTCP_RST, - opts->reset_transient, - opts->reset_reason); - return; - } - - /* DSS, MPC, MPJ and ADD_ADDR are mutually exclusive, see - * mptcp_established_options*() + /* DSS, MPC, MPJ, ADD_ADDR, FASTCLOSE and RST are mutually exclusive, + * see mptcp_established_options*() */ if (likely(OPTION_MPTCP_DSS & opts->suboptions)) { struct mptcp_ext *mpext =3D &opts->ext_copy; @@ -1447,6 +1458,20 @@ void mptcp_write_options(__be32 *ptr, const struct t= cp_sock *tp, ptr +=3D 1; } } + } else if (unlikely(OPTION_MPTCP_RST & opts->suboptions)) { + /* RST is mutually exclusive with everything else */ + *ptr++ =3D mptcp_option(MPTCPOPT_RST, + TCPOLEN_MPTCP_RST, + opts->reset_transient, + opts->reset_reason); + return; + } else if (unlikely(OPTION_MPTCP_FASTCLOSE & opts->suboptions)) { + /* FASTCLOSE is mutually exclusive with everything else */ + *ptr++ =3D mptcp_option(MPTCPOPT_MP_FASTCLOSE, + TCPOLEN_MPTCP_FASTCLOSE, + 0, 0); + put_unaligned_be64(opts->rcvr_key, ptr); + return; } =20 if (OPTION_MPTCP_PRIO & opts->suboptions) { diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index e77de7662df0..cee323de1a1c 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -422,6 +422,7 @@ struct mptcp_subflow_context { backup : 1, send_mp_prio : 1, send_mp_fail : 1, + send_fastclose : 1, send_infinite_map : 1, rx_eof : 1, can_ack : 1, /* only after processing the remote a key */ --=20 2.33.1 From nobody Thu Apr 18 02:46:03 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:cbb9:0:0:0:0:0 with SMTP id v25csp781079jap; Thu, 11 Nov 2021 08:22:01 -0800 (PST) X-Google-Smtp-Source: ABdhPJz4ZA8gWnNbKVTEgOgFCc4YqJwIZ15X/QzZ8DyjCp1nbTccKrcUhHMohDIgZaKzNonf/5Z2 X-Received: by 2002:a05:6830:3152:: with SMTP id c18mr2889573ots.82.1636647721621; Thu, 11 Nov 2021 08:22:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636647721; cv=none; d=google.com; s=arc-20160816; b=GF9AnXD8oKOjtPEYD3Hc3fgJXA+Xu4vHW5z1UHbGFWM2icwtNqhvaXAC5t3jo9KT+5 0+W8wMeJJ8HI+zt64hIkNMCpK4qaRaTXMURFmD9Gn7ZMF9oJpgJKauUM8VRixsMKparP LgcTKlYBxwu9nHIwQhsUdFF/O5QhLq9R66QYOsGYAk7Qo+t3O+8M8kl5pQBw9jE+4ihi To+TFU6t/g7d/8UlAstJRddj9niUJIKnLJbgwOTKKIqC1uiveARt4FnADoF8NpSQg65f PnG0ovQv8w+vJexrovj+lCB6PckR9sKXDiiDAWV/l6B3bYf6aIUBqMXlMpejZOVQS01I ka3g== 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:to:from:dkim-signature; bh=f0oMTytNnpjGVPn6sIMjvirU1X39jV9Pq17avPHWWMk=; b=PxEFUbb8CX7YRG3yqGeIZL48L8nHOsmbGkWfGhly6xOB4sFDtT7TND/aVO/uvFq/kW dTKPkitgjTBEj/vpHDIGJbX3GNG3HexwBcd3sbzeJgfierFx+f52gn6ZT9uoIbS2LiVs vOgqx2h/Csr+wn/F3qjIL6ynMj9KmZD/U/+UhgjTT42VCqtPNK2wifjfkWC3AnLfyHuy uhAbz6yD6deoN4C7JY9mQtcWm5bb1yogQYitfSxiX06NeJ6nFA0b9lhACx3ssLUGJN1F pCCPHScOEU/scl/9wM5CQEktZTkAqev+lpkQVmlIDxZGnpeMa3C2gtFC3i/YtLs1O5st /JvQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=ITYlwl0s; spf=pass (google.com: domain of mptcp+bounces-2425-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-2425-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from ewr.edge.kernel.org (ewr.edge.kernel.org. [147.75.197.195]) by mx.google.com with ESMTPS id y11si5782520oto.274.2021.11.11.08.22.01 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Nov 2021 08:22:01 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2425-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) client-ip=147.75.197.195; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=ITYlwl0s; spf=pass (google.com: domain of mptcp+bounces-2425-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.197.195 as permitted sender) smtp.mailfrom="mptcp+bounces-2425-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.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 ewr.edge.kernel.org (Postfix) with ESMTPS id 07A941C09F1 for ; Thu, 11 Nov 2021 16:22:01 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 64F302C82; Thu, 11 Nov 2021 16:21:58 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) (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 F31C92C81 for ; Thu, 11 Nov 2021 16:21:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1636647716; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=f0oMTytNnpjGVPn6sIMjvirU1X39jV9Pq17avPHWWMk=; b=ITYlwl0siyDQ+Sa6IZOu7DcsZpfza55sMdxubt8IGqCAInGzmj1quHH5aYQVmEOMERveX0 EErJWWy2L1XAgU2yxutnNTLjNaQU6F1tD+NkTD3AdyiL13qa7F1Y0o76E1XqgvaKnIRY4W ZwbZOdWq2DYt2azNwdEWnWVq0YSEa3U= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-517-nhoIj3CvPP63GhjvBzpRfw-1; Thu, 11 Nov 2021 11:21:54 -0500 X-MC-Unique: nhoIj3CvPP63GhjvBzpRfw-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 0FF6719057A2 for ; Thu, 11 Nov 2021 16:21:54 +0000 (UTC) Received: from gerbillo.fritz.box (unknown [10.39.194.197]) by smtp.corp.redhat.com (Postfix) with ESMTP id EE5A55D6B1 for ; Thu, 11 Nov 2021 16:21:52 +0000 (UTC) From: Paolo Abeni To: mptcp@lists.linux.dev Subject: [PATCH v2 mptcp-next 4/7] mptcp: full disconnect implementation Date: Thu, 11 Nov 2021 17:21:39 +0100 Message-Id: <32bb6535c35ac10c222e3d8693bb86040d4909dc.1636647623.git.pabeni@redhat.com> In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=pabeni@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The current mptcp_disconnect() implementation lacks several steps, we additionally need to reset the msk socket state and flush the subflow list. Factor out the needed helper to avoid code duplication. Additionally ensure that the initial subflow is disposed only after mptcp_close(), just reset it at disconnect time. Signed-off-by: Paolo Abeni Reviewed-by: Mat Martineau --- v1 -> v2: - fix compile warning (CI) - reset first subflow socket state on disconnect - use fast-close on disconnect --- net/mptcp/pm.c | 10 +++-- net/mptcp/protocol.c | 101 ++++++++++++++++++++++++++++++++----------- net/mptcp/protocol.h | 14 ++++++ net/mptcp/token.c | 1 + 4 files changed, 98 insertions(+), 28 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 86b38a830b4c..761995a34124 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -362,7 +362,7 @@ void mptcp_pm_subflow_chk_stale(const struct mptcp_sock= *msk, struct sock *ssk) } } =20 -void mptcp_pm_data_init(struct mptcp_sock *msk) +void mptcp_pm_data_reset(struct mptcp_sock *msk) { msk->pm.add_addr_signaled =3D 0; msk->pm.add_addr_accepted =3D 0; @@ -377,10 +377,14 @@ void mptcp_pm_data_init(struct mptcp_sock *msk) WRITE_ONCE(msk->pm.remote_deny_join_id0, false); msk->pm.status =3D 0; =20 + mptcp_pm_nl_data_init(msk); +} + +void mptcp_pm_data_init(struct mptcp_sock *msk) +{ spin_lock_init(&msk->pm.lock); INIT_LIST_HEAD(&msk->pm.anno_list); - - mptcp_pm_nl_data_init(msk); + mptcp_pm_data_reset(msk); } =20 void __init mptcp_pm_init(void) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 3fef1b4e7780..84a3df43a38d 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2271,6 +2271,10 @@ bool __mptcp_retransmit_pending_data(struct sock *sk) return true; } =20 +/* flags for __mptcp_close_ssk() */ +#define MPTCP_CF_PUSH BIT(1) +#define MPTCP_CF_FASTCLOSE BIT(2) + /* subflow sockets can be either outgoing (connect) or incoming * (accept). * @@ -2280,22 +2284,37 @@ bool __mptcp_retransmit_pending_data(struct sock *s= k) * parent socket. */ static void __mptcp_close_ssk(struct sock *sk, struct sock *ssk, - struct mptcp_subflow_context *subflow) + struct mptcp_subflow_context *subflow, + unsigned int flags) { struct mptcp_sock *msk =3D mptcp_sk(sk); - bool need_push; + bool need_push, dispose_it; =20 - list_del(&subflow->node); + dispose_it =3D !msk->subflow || ssk !=3D msk->subflow->sk; + if (dispose_it) + list_del(&subflow->node); =20 lock_sock_nested(ssk, SINGLE_DEPTH_NESTING); =20 + if (flags & MPTCP_CF_FASTCLOSE) + subflow->send_fastclose =3D 1; + + need_push =3D (flags & MPTCP_CF_PUSH) && __mptcp_retransmit_pending_data(= sk); + if (!dispose_it) { + tcp_disconnect(ssk, 0); + msk->subflow->state =3D SS_UNCONNECTED; + mptcp_subflow_ctx_reset(subflow); + release_sock(ssk); + + goto out; + } + /* if we are invoked by the msk cleanup code, the subflow is * already orphaned */ if (ssk->sk_socket) sock_orphan(ssk); =20 - need_push =3D __mptcp_retransmit_pending_data(sk); subflow->disposable =3D 1; =20 /* if ssk hit tcp_done(), tcp_cleanup_ulp() cleared the related ops @@ -2315,14 +2334,12 @@ static void __mptcp_close_ssk(struct sock *sk, stru= ct sock *ssk, =20 sock_put(ssk); =20 - if (ssk =3D=3D msk->last_snd) - msk->last_snd =3D NULL; - if (ssk =3D=3D msk->first) msk->first =3D NULL; =20 - if (msk->subflow && ssk =3D=3D msk->subflow->sk) - mptcp_dispose_initial_subflow(msk); +out: + if (ssk =3D=3D msk->last_snd) + msk->last_snd =3D NULL; =20 if (need_push) __mptcp_push_pending(sk, 0); @@ -2333,7 +2350,7 @@ void mptcp_close_ssk(struct sock *sk, struct sock *ss= k, { if (sk->sk_state =3D=3D TCP_ESTABLISHED) mptcp_event(MPTCP_EVENT_SUB_CLOSED, mptcp_sk(sk), ssk, GFP_KERNEL); - __mptcp_close_ssk(sk, ssk, subflow); + __mptcp_close_ssk(sk, ssk, subflow, MPTCP_CF_PUSH); } =20 static unsigned int mptcp_sync_mss(struct sock *sk, u32 pmtu) @@ -2557,9 +2574,20 @@ static int __mptcp_init_sock(struct sock *sk) return 0; } =20 -static int mptcp_init_sock(struct sock *sk) +static void mptcp_ca_reset(struct sock *sk) { struct inet_connection_sock *icsk =3D inet_csk(sk); + + tcp_assign_congestion_control(sk); + strcpy(mptcp_sk(sk)->ca_name, icsk->icsk_ca_ops->name); + + /* no need to keep a reference to the ops, the name will suffice */ + tcp_cleanup_congestion_control(sk); + icsk->icsk_ca_ops =3D NULL; +} + +static int mptcp_init_sock(struct sock *sk) +{ struct net *net =3D sock_net(sk); int ret; =20 @@ -2580,12 +2608,7 @@ static int mptcp_init_sock(struct sock *sk) /* fetch the ca name; do it outside __mptcp_init_sock(), so that clone wi= ll * propagate the correct value */ - tcp_assign_congestion_control(sk); - strcpy(mptcp_sk(sk)->ca_name, icsk->icsk_ca_ops->name); - - /* no need to keep a reference to the ops, the name will suffice */ - tcp_cleanup_congestion_control(sk); - icsk->icsk_ca_ops =3D NULL; + mptcp_ca_reset(sk); =20 sk_sockets_allocated_inc(sk); sk->sk_rcvbuf =3D sock_net(sk)->ipv4.sysctl_tcp_rmem[1]; @@ -2744,9 +2767,13 @@ static void __mptcp_destroy_sock(struct sock *sk) sk_stop_timer(sk, &sk->sk_timer); msk->pm.status =3D 0; =20 + /* clears msk->subflow, allowing the following loop to close + * even the initial subflow + */ + mptcp_dispose_initial_subflow(msk); list_for_each_entry_safe(subflow, tmp, &conn_list, node) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); - __mptcp_close_ssk(sk, ssk, subflow); + __mptcp_close_ssk(sk, ssk, subflow, 0); } =20 sk->sk_prot->destroy(sk); @@ -2757,7 +2784,6 @@ static void __mptcp_destroy_sock(struct sock *sk) xfrm_sk_free_policy(sk); =20 sk_refcnt_debug_release(sk); - mptcp_dispose_initial_subflow(msk); sock_put(sk); } =20 @@ -2793,6 +2819,9 @@ static void mptcp_close(struct sock *sk, long timeout) =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, mptcp_sk(sk), NULL, GFP_KERNEL); + if (sk->sk_state =3D=3D TCP_CLOSE) { __mptcp_destroy_sock(sk); do_cancel_work =3D true; @@ -2803,9 +2832,6 @@ static void mptcp_close(struct sock *sk, long timeout) if (do_cancel_work) mptcp_cancel_work(sk); =20 - if (mptcp_sk(sk)->token) - mptcp_event(MPTCP_EVENT_CLOSED, mptcp_sk(sk), NULL, GFP_KERNEL); - sock_put(sk); } =20 @@ -2839,13 +2865,36 @@ static int mptcp_disconnect(struct sock *sk, int fl= ags) =20 mptcp_do_flush_join_list(msk); =20 + inet_sk_state_store(sk, TCP_CLOSE); + mptcp_for_each_subflow(msk, subflow) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); =20 - lock_sock(ssk); - tcp_disconnect(ssk, flags); - release_sock(ssk); + __mptcp_close_ssk(sk, ssk, subflow, MPTCP_CF_FASTCLOSE); } + + sk_stop_timer(sk, &msk->sk.icsk_retransmit_timer); + sk_stop_timer(sk, &sk->sk_timer); + + if (mptcp_sk(sk)->token) + mptcp_event(MPTCP_EVENT_CLOSED, mptcp_sk(sk), NULL, GFP_KERNEL); + + mptcp_destroy_common(msk); + msk->last_snd =3D NULL; + msk->flags =3D 0; + msk->recovery =3D false; + msk->can_ack =3D false; + msk->fully_established =3D false; + msk->rcv_data_fin =3D false; + msk->snd_data_fin_enable =3D false; + msk->rcv_fastclose =3D false; + msk->use_64bit_ack =3D false; + WRITE_ONCE(msk->csum_enabled, mptcp_is_checksum_enabled(sock_net(sk))); + mptcp_pm_data_reset(msk); + mptcp_ca_reset(sk); + + sk->sk_shutdown =3D 0; + sk_error_report(sk); return 0; } =20 @@ -2985,9 +3034,11 @@ void mptcp_destroy_common(struct mptcp_sock *msk) __mptcp_clear_xmit(sk); =20 /* move to sk_receive_queue, sk_stream_kill_queues will purge it */ + mptcp_data_lock(sk); skb_queue_splice_tail_init(&msk->receive_queue, &sk->sk_receive_queue); __skb_queue_purge(&sk->sk_receive_queue); skb_rbtree_purge(&msk->out_of_order_queue); + mptcp_data_unlock(sk); =20 /* move all the rx fwd alloc into the sk_mem_reclaim_final in * inet_sock_destruct() will dispose it diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index cee323de1a1c..f8ed68c5ef9d 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -394,6 +394,9 @@ DECLARE_PER_CPU(struct mptcp_delegated_action, mptcp_de= legated_actions); /* MPTCP subflow context */ struct mptcp_subflow_context { struct list_head node;/* conn_list of subflows */ + + char reset_start[0]; + unsigned long avg_pacing_rate; /* protected by msk socket lock */ u64 local_key; u64 remote_key; @@ -442,6 +445,9 @@ struct mptcp_subflow_context { u8 stale_count; =20 long delegated_status; + + char reset_end[0]; + struct list_head delegated_node; /* link into delegated_action, protect= ed by local BH */ =20 u32 setsockopt_seq; @@ -473,6 +479,13 @@ mptcp_subflow_tcp_sock(const struct mptcp_subflow_cont= ext *subflow) return subflow->tcp_sock; } =20 +static inline void +mptcp_subflow_ctx_reset(struct mptcp_subflow_context *subflow) +{ + memset(subflow->reset_start, 0, subflow->reset_end - subflow->reset_start= ); + subflow->request_mptcp =3D 1; +} + static inline u64 mptcp_subflow_get_map_offset(const struct mptcp_subflow_context *subflow) { @@ -712,6 +725,7 @@ void mptcp_crypto_hmac_sha(u64 key1, u64 key2, u8 *msg,= int len, void *hmac); =20 void __init mptcp_pm_init(void); void mptcp_pm_data_init(struct mptcp_sock *msk); +void mptcp_pm_data_reset(struct mptcp_sock *msk); void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock = *ssk); void mptcp_pm_nl_subflow_chk_stale(const struct mptcp_sock *msk, struct so= ck *ssk); void mptcp_pm_new_connection(struct mptcp_sock *msk, const struct sock *ss= k, int server_side); diff --git a/net/mptcp/token.c b/net/mptcp/token.c index e581b341c5be..f52ee7b26aed 100644 --- a/net/mptcp/token.c +++ b/net/mptcp/token.c @@ -384,6 +384,7 @@ void mptcp_token_destroy(struct mptcp_sock *msk) bucket->chain_len--; } spin_unlock_bh(&bucket->lock); + WRITE_ONCE(msk->token, 0); } =20 void __init mptcp_token_init(void) --=20 2.33.1 From nobody Thu Apr 18 02:46:03 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:cbb9:0:0:0:0:0 with SMTP id v25csp781098jap; Thu, 11 Nov 2021 08:22:02 -0800 (PST) X-Google-Smtp-Source: ABdhPJwzW7JESa9PGo5CNW69R+sU4ixM3MxrFjztAA8aDoHPqlneCh1r7trMhaNxjydIGCmMqtH5 X-Received: by 2002:a17:90b:19c8:: with SMTP id nm8mr28038496pjb.163.1636647722279; Thu, 11 Nov 2021 08:22:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636647722; cv=none; d=google.com; s=arc-20160816; b=bugqDikr1z2qN30IJtyoDmNzmszy47pC5+vHzbZ7WswINy/+DZsuFHFjZ/I0HV8OYH pol5vMMcaCJyt8UPsiTzgcJEqhh+P4U6GcYLxQ9s3MG43eYpFSRlZhaf+fHdXJliqqLj tYVFccMjb9fGMbzeQjJZ1dlGwBdki4w29EfWKJe7zCmJKAgtig3j0yifTCmN4bJFc7wu WJnu/SjExXfGNw2SPo0LcLFtNGU34/LWDPoRJ9E6Britga9qyNu6NZ0tlQprGdD6vxaM ExdBrfHeWCWVC0JW2sc7GTowgvyihUTi8ndNjxmziYi2bIh6/kMLkcfN/JTkXIhmjB5x ZnTA== 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:to:from:dkim-signature; bh=W50QpIb8FFp5BdkNVsVte2qDaRpQrfS5Es27d7tAdwA=; b=S+PW6KbZpI7FneqUsjLwNJtnRwpzGNaMdQ75Rp1op1j9vBc4b8c0rZpD5k8qhaDio5 B3ZpZnLCrNtbKzEbPkNiQqZsBPuzZ6f5YSx4EQqgwkMfbaNZYZqdb8xdt7q87oqRZ0fB NmIDg5yrapU2CcsSDtGw7y9OPX/1UgYOx/yo4qBX7FJeZpkgu928aFa9Cbi2s3uq1KYa ZHlB+by3z4HWhUzhiHtfpG8PGIvgxDhxcigCBgzw/CvKDCzevQT3YvzZlnWCRzi0i7eu 0hJR9Y0+hKs1MSflCRCGKIZfFRbHkHPQWF8aZDqw3DYzSepkYWBeVTRfcl/FW8TArloE b7gQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=C0WF1Kwd; spf=pass (google.com: domain of mptcp+bounces-2426-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-2426-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from sjc.edge.kernel.org (sjc.edge.kernel.org. [147.75.69.165]) by mx.google.com with ESMTPS id c10si5847867plc.62.2021.11.11.08.22.02 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Nov 2021 08:22:02 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2426-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) client-ip=147.75.69.165; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=C0WF1Kwd; spf=pass (google.com: domain of mptcp+bounces-2426-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-2426-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.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 sjc.edge.kernel.org (Postfix) with ESMTPS id D3BA73E103F for ; Thu, 11 Nov 2021 16:22:01 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 336B02C87; Thu, 11 Nov 2021 16:21:59 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (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 CAB162C85 for ; Thu, 11 Nov 2021 16:21:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1636647716; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=W50QpIb8FFp5BdkNVsVte2qDaRpQrfS5Es27d7tAdwA=; b=C0WF1KwdfF9uVow3SC0IMZsAGa59ZYzYsN4otAyAuoYMYLQFWW8Iaa5Lhuq958OhrNNIsn UfYSEo5Lnc8VpArdnKi7iWKS93aeVVOAdqZeP5QH7K2agwOsKWYlnPIcBbfE91KXfEtEgC 2GnS+l2ARSQFPmzR2dQiRrFZWJ6Bo8k= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-424-x0WYAA5KMYu2ehXWUFtp8Q-1; Thu, 11 Nov 2021 11:21:55 -0500 X-MC-Unique: x0WYAA5KMYu2ehXWUFtp8Q-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 015B61030C20 for ; Thu, 11 Nov 2021 16:21:55 +0000 (UTC) Received: from gerbillo.fritz.box (unknown [10.39.194.197]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6686F5D6B1 for ; Thu, 11 Nov 2021 16:21:54 +0000 (UTC) From: Paolo Abeni To: mptcp@lists.linux.dev Subject: [PATCH v2 mptcp-next 5/7] mptcp: cleanup accept and poll Date: Thu, 11 Nov 2021 17:21:40 +0100 Message-Id: <1bb810c54d43e268c570f894f74850c8226ffff8.1636647623.git.pabeni@redhat.com> In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=pabeni@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" After the previous patch, msk->subflow will never be deleted during the whole msk lifetime. We don't need anymore to acquire references to it in mptcp_stream_accept() and we can use the listener subflow accept queue to simplify mptcp_poll() for listener socket. Overall this removes a lock pair and 4 more atomic operations per accept(). Signed-off-by: Paolo Abeni Reviewed-by: Mat Martineau --- net/mptcp/protocol.c | 25 +++++++------------------ net/mptcp/protocol.h | 1 - net/mptcp/subflow.c | 1 - 3 files changed, 7 insertions(+), 20 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 84a3df43a38d..ee2a5169c13a 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -3517,17 +3517,9 @@ static int mptcp_stream_accept(struct socket *sock, = struct socket *newsock, =20 pr_debug("msk=3D%p", msk); =20 - lock_sock(sock->sk); - if (sock->sk->sk_state !=3D TCP_LISTEN) - goto unlock_fail; - ssock =3D __mptcp_nmpc_socket(msk); if (!ssock) - goto unlock_fail; - - clear_bit(MPTCP_DATA_READY, &msk->flags); - sock_hold(ssock->sk); - release_sock(sock->sk); + return -EINVAL; =20 err =3D ssock->ops->accept(sock, newsock, flags, kern); if (err =3D=3D 0 && !mptcp_is_tcpsk(newsock->sk)) { @@ -3567,14 +3559,7 @@ static int mptcp_stream_accept(struct socket *sock, = struct socket *newsock, release_sock(newsk); } =20 - if (inet_csk_listen_poll(ssock->sk)) - set_bit(MPTCP_DATA_READY, &msk->flags); - sock_put(ssock->sk); return err; - -unlock_fail: - release_sock(sock->sk); - return -EINVAL; } =20 static __poll_t mptcp_check_readable(struct mptcp_sock *msk) @@ -3620,8 +3605,12 @@ static __poll_t mptcp_poll(struct file *file, struct= socket *sock, =20 state =3D inet_sk_state_load(sk); pr_debug("msk=3D%p state=3D%d flags=3D%lx", msk, state, msk->flags); - if (state =3D=3D TCP_LISTEN) - return test_bit(MPTCP_DATA_READY, &msk->flags) ? EPOLLIN | EPOLLRDNORM := 0; + if (state =3D=3D TCP_LISTEN) { + if (WARN_ON_ONCE(!msk->subflow || !msk->subflow->sk)) + return 0; + + return inet_csk_listen_poll(msk->subflow->sk); + } =20 if (state !=3D TCP_SYN_SENT && state !=3D TCP_SYN_RECV) { mask |=3D mptcp_check_readable(msk); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index f8ed68c5ef9d..a6a4bd7de5b4 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -111,7 +111,6 @@ #define MPTCP_RST_TRANSIENT BIT(0) =20 /* MPTCP socket flags */ -#define MPTCP_DATA_READY 0 #define MPTCP_NOSPACE 1 #define MPTCP_WORK_RTX 2 #define MPTCP_WORK_EOF 3 diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 12c49f898e28..2aea7935019e 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1298,7 +1298,6 @@ static void subflow_data_ready(struct sock *sk) if (reqsk_queue_empty(&inet_csk(sk)->icsk_accept_queue)) return; =20 - set_bit(MPTCP_DATA_READY, &msk->flags); parent->sk_data_ready(parent); return; } --=20 2.33.1 From nobody Thu Apr 18 02:46:03 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:cbb9:0:0:0:0:0 with SMTP id v25csp781115jap; Thu, 11 Nov 2021 08:22:03 -0800 (PST) X-Google-Smtp-Source: ABdhPJyOGEU8YRjrGBiZE7oSHFh190p3GB6ZGfQMccD2+h9HPt+qI+5xs0zZ84Z0FGVEuIMsaiEl X-Received: by 2002:a17:90a:e297:: with SMTP id d23mr9680975pjz.131.1636647723130; Thu, 11 Nov 2021 08:22:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636647723; cv=none; d=google.com; s=arc-20160816; b=bWY3wc1F0KuZN8phCrNhSG8Z2CHRN0rXQhOVVwUs3awGdIjUQhfaJQpMEQmdWAf6S+ sxOqf4LXgdLW794yy7Upln04p93kt52iimYPJlt0zNJUdrHZfwpbWBfIDpXdtVSn8eKO ydv88AhZbKXPiWkw2/9FnfnAJADOX124FouqrC0XYfR0R7FcorWMe8XDzJUxv4fdvKef yfZInr1nMinfcWK15J0CCrViwkc28xABBm+ICC0ZPhrNA+OEB1JoCnIfZGCK6D1XjB1a VlFfq5sdhGillGMZAd2GeksdQ/nmN7WQjCdEkLSCgrD6sKtoN1UYJqIduLhTAEBIhwqy NmOQ== 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:to:from:dkim-signature; bh=44DfOAC6I6ruJeti5Ujr/kwA8RUOK+Jd1rYbql/5lMM=; b=KN38HRUTgvxkJQnb2sxTEKcoxgcMeOq6r1KCpRBFjCsZiF3l5q6oLkhe3CM4NSTKCY pwx+R4QVYP1S24J5U8aUFkSZOBE8vJMSJwzgGRL4uc21lYqnKjxfFWEsJEpI2b5tVV6I 7EzZ49VOrPvrgPnfRMWvhEqeSrR8YyflVWAcXlR8nFZxykkYAEN/2pURk1Nhu0oCQbd0 ZN6lBKdqlK2Yq+Md121PZO3LOj5p8R2SMx7ayuEZ+BUaA908WAMuUoekMxgogNs+QiMz goOqtXsC8HVs0T7paIZjE2wuv/N2jyCruH/CrAhhjTo/4PRyvwUuTvgwSp+0M4bskwcK go6Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=ENqlE8aR; spf=pass (google.com: domain of mptcp+bounces-2427-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-2427-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from sjc.edge.kernel.org (sjc.edge.kernel.org. [147.75.69.165]) by mx.google.com with ESMTPS id k5si7293354pff.291.2021.11.11.08.22.03 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Nov 2021 08:22:03 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2427-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) client-ip=147.75.69.165; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=ENqlE8aR; spf=pass (google.com: domain of mptcp+bounces-2427-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-2427-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.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 sjc.edge.kernel.org (Postfix) with ESMTPS id D6C953E1069 for ; Thu, 11 Nov 2021 16:22:02 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 687392C86; Thu, 11 Nov 2021 16:22:00 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) (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 E1C1D2C81 for ; Thu, 11 Nov 2021 16:21:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1636647718; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=44DfOAC6I6ruJeti5Ujr/kwA8RUOK+Jd1rYbql/5lMM=; b=ENqlE8aRtCr4DLhvjxuUmBXC7JGetwQIBbvfuXJG3z51yX9zm8N9VoGkBMFkHLfhPZ3ReP uHyl+8nMEEWB9KGQ4bVooJcHbpCNO4vQF6qUGG5l0gifiHvuJ0kyqwKXa4di/AlOHAgvR7 hfYFf1wDIFJtp7rWsYxwXpC8WP9lqMg= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-585-lXkPt4MIPDuL5vEEdYVBKQ-1; Thu, 11 Nov 2021 11:21:56 -0500 X-MC-Unique: lXkPt4MIPDuL5vEEdYVBKQ-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id EB682A40C0 for ; Thu, 11 Nov 2021 16:21:55 +0000 (UTC) Received: from gerbillo.fritz.box (unknown [10.39.194.197]) by smtp.corp.redhat.com (Postfix) with ESMTP id 594EA5D6B1 for ; Thu, 11 Nov 2021 16:21:55 +0000 (UTC) From: Paolo Abeni To: mptcp@lists.linux.dev Subject: [PATCH v2 mptcp-next 6/7] mptcp: implement support for user-space disconnect Date: Thu, 11 Nov 2021 17:21:41 +0100 Message-Id: <3ca2682745f315b4106c2041a85e58b325eed03b.1636647623.git.pabeni@redhat.com> In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=pabeni@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Handle explicitly AF_UNSPEC in mptcp_stream_connnect() to allow user-space to disconnect established MPTCP connections Signed-off-by: Paolo Abeni Reviewed-by: Mat Martineau --- net/mptcp/protocol.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index ee2a5169c13a..8319db8ae3ed 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -3428,9 +3428,20 @@ static int mptcp_stream_connect(struct socket *sock,= struct sockaddr *uaddr, struct mptcp_sock *msk =3D mptcp_sk(sock->sk); struct mptcp_subflow_context *subflow; struct socket *ssock; - int err; + int err =3D -EINVAL; =20 lock_sock(sock->sk); + if (uaddr) { + if (addr_len < sizeof(uaddr->sa_family)) + goto unlock; + + if (uaddr->sa_family =3D=3D AF_UNSPEC) { + err =3D mptcp_disconnect(sock->sk, flags); + sock->state =3D err ? SS_DISCONNECTING : SS_UNCONNECTED; + goto unlock; + } + } + if (sock->state !=3D SS_UNCONNECTED && msk->subflow) { /* pending connection or invalid state, let existing subflow * cope with that @@ -3440,10 +3451,8 @@ static int mptcp_stream_connect(struct socket *sock,= struct sockaddr *uaddr, } =20 ssock =3D __mptcp_nmpc_socket(msk); - if (!ssock) { - err =3D -EINVAL; + if (!ssock) goto unlock; - } =20 mptcp_token_destroy(msk); inet_sk_state_store(sock->sk, TCP_SYN_SENT); --=20 2.33.1 From nobody Thu Apr 18 02:46:03 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:cbb9:0:0:0:0:0 with SMTP id v25csp781153jap; Thu, 11 Nov 2021 08:22:04 -0800 (PST) X-Google-Smtp-Source: ABdhPJw4nh2Xsq48JeCa6vxxIlWRtLHjFBvhOEZqFMVWitapoIq4qitio8Hken74ADNsKNq9swZE X-Received: by 2002:a63:4a60:: with SMTP id j32mr5582348pgl.140.1636647724678; Thu, 11 Nov 2021 08:22:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636647724; cv=none; d=google.com; s=arc-20160816; b=1D+pUkLDTdkXbjNKf7VQvtTS++1nr7B/v97KZ6tgYLD//yhhPTXA0Ebw7uR8kWwyn5 ZgraDrVAbavh/cTlwIbTQ1WTotc5ddcP+wtZPsIMHIWZep1nQKrQquHgKZ786umODb8d IOywkAMlb8SdCQ83GuheEfPN5eIzqqoe3GDOqZHTRfVF0CV0VZvaMrHJJdfEA9VRjRYj r8HACwehNxv01CW82/OfdvOTAJSleh5SjxPvJC+U8GicmW3XzW4KN8KRIy0HgB0zJbOn TrKyLFF7HmqNIlEjuQ1e0fhj1bN3Rv/8SUcbguH+LsBBfujFTYcUn0UqKWFuLjGva8Nf 5fkg== 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:to:from:dkim-signature; bh=RwZxe52rOthBvfSd6KYvhMJ8WUuYSspU9JmRzdKaAKU=; b=CvUWZ58gVpphoG+78Aig1VssaJlLhWbvHQk+ao6izwGLlR+VGaqzY/ouHuCO9iR6ZM 9uNvXpSr5jUSHyl0kMtlarKOwiJaJ9XPxQcLZ8l19++MhpEi2OIUarp3PZAVJhLiOuq+ n3qjv2Nn43BA6Oho01XozD3GrbN23clp2206GOLbmvs23ce2KFghDhc6oLa7PRHNm2+8 2he/xd7U45TPaR6XwVPY3xxdYZoJPgdN5HXRwBPsqD0837vtqwgHptbOZWPBYdj7kGdn KIBM5FxASBsOk4wvnlyiFrykfnAc8TnQ1vg0k0XK7Jj/Ogp4vSPah/9OUhBmEOMB89fg zuEw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Kng5kW8w; spf=pass (google.com: domain of mptcp+bounces-2428-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-2428-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from sjc.edge.kernel.org (sjc.edge.kernel.org. [147.75.69.165]) by mx.google.com with ESMTPS id ob6si6919852pjb.10.2021.11.11.08.22.04 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Nov 2021 08:22:04 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2428-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) client-ip=147.75.69.165; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Kng5kW8w; spf=pass (google.com: domain of mptcp+bounces-2428-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 147.75.69.165 as permitted sender) smtp.mailfrom="mptcp+bounces-2428-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.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 sjc.edge.kernel.org (Postfix) with ESMTPS id 3094B3E1041 for ; Thu, 11 Nov 2021 16:22:04 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id BBE9E2C81; Thu, 11 Nov 2021 16:22:01 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (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 6320D2C85 for ; Thu, 11 Nov 2021 16:22:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1636647719; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=RwZxe52rOthBvfSd6KYvhMJ8WUuYSspU9JmRzdKaAKU=; b=Kng5kW8wXtDaQgRoP/GE2WcyseOulS0gU/yQyeJyO69/74hhKHZ3c8MpciYS1lg6oBQ9st bYPPxDnkFjkrZKnbkeNj+XV4uNFgUuXycM/S6CbAhPSs+rBd8SEUij/Jd/XsgWiknS8V0B rpK0AOUB67lOwP0oQkiKmQwYDKLH2x4= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-256-MJHx_L_xPly7MzozVA7jbw-1; Thu, 11 Nov 2021 11:21:57 -0500 X-MC-Unique: MJHx_L_xPly7MzozVA7jbw-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E54B481C85E for ; Thu, 11 Nov 2021 16:21:56 +0000 (UTC) Received: from gerbillo.fritz.box (unknown [10.39.194.197]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5100F5D6B1 for ; Thu, 11 Nov 2021 16:21:56 +0000 (UTC) From: Paolo Abeni To: mptcp@lists.linux.dev Subject: [PATCH v2 mptcp-next 7/7] mptcp: add disconnect selftests Date: Thu, 11 Nov 2021 17:21:42 +0100 Message-Id: <75114dbd18fd261084d7d504103787dd3d9ae255.1636647623.git.pabeni@redhat.com> In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=pabeni@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Performs several disconnect/reconnect on the same socket, ensuring the overall transfer is succesful. The new test leverages ioctl(SIOCOUTQ) to ensure all the pending data is acked before disconnecting. Additionally order alphabetically the test program arguments list for better maintainability. Signed-off-by: Paolo Abeni Reviewed-by: Mat Martineau --- notes: - v1 -> v2: - updated usage, re-ordered args - this is on top of Florian's patches --- .../selftests/net/mptcp/mptcp_connect.c | 148 +++++++++++++++--- .../selftests/net/mptcp/mptcp_connect.sh | 39 ++++- 2 files changed, 160 insertions(+), 27 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.c b/tools/test= ing/selftests/net/mptcp/mptcp_connect.c index e3e4338d610f..61abf98e897e 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_connect.c +++ b/tools/testing/selftests/net/mptcp/mptcp_connect.c @@ -16,6 +16,7 @@ #include #include =20 +#include #include #include #include @@ -28,6 +29,7 @@ =20 #include #include +#include =20 extern int optind; =20 @@ -69,6 +71,8 @@ static unsigned int cfg_time; static unsigned int cfg_do_w; static int cfg_wait; static uint32_t cfg_mark; +static char *cfg_input =3D NULL; +static int cfg_repeat =3D 1; =20 struct cfg_cmsg_types { unsigned int cmsg_enabled:1; @@ -92,23 +96,32 @@ static struct cfg_sockopt_types cfg_sockopt_types; =20 static void die_usage(void) { - fprintf(stderr, "Usage: mptcp_connect [-6] [-u] [-s MPTCP|TCP] [-p port] = [-m mode]" - "[-l] [-w sec] [-t num] [-T num] connect_address\n"); + fprintf(stderr, "Usage: mptcp_connect [-6] [-c cmsg] [-i file] [-I num] [= -j] [-l] " + "[-m mode] [-M mark] [-o option] [-p port] [-P mode] [-j] [-l] [-r num] " + "[-s MPTCP|TCP] [-S num] [-r num] [-t num] [-T num] [-u] [-w sec] connec= t_address\n"); fprintf(stderr, "\t-6 use ipv6\n"); + fprintf(stderr, "\t-c cmsg -- test cmsg type \n"); + fprintf(stderr, "\t-i file -- read the data to send from the given file i= nstead of stdin"); + fprintf(stderr, "\t-I num -- repeat the transfer 'num' times. In listen m= ode accepts num " + "incoming connections, in client mode, disconnect and reconnect to the s= erver\n"); + fprintf(stderr, "\t-j -- add additional sleep at connection start and= tear down" + "-- for MPJ tests\n"); + fprintf(stderr, "\t-l -- listens mode, accepts incoming connection\n"= ); + fprintf(stderr, "\t-m [poll|mmap|sendfile] -- use poll(default)/mmap+writ= e/sendfile\n"); + fprintf(stderr, "\t-M mark -- set socket packet mark\n"); + fprintf(stderr, "\t-o option -- test sockopt