From nobody Wed May 7 08:15:45 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 D1463212B2B for <mptcp@lists.linux.dev>; Wed, 22 Jan 2025 12:10:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737547804; cv=none; b=IBKZRRRjQL41j7mWfTRbPdCluGU+nrZ/Uta/i4e6/yeHEVIOw2umhTbAsj7M4kEpxAiny/iMCRgDNlOeDZKNMMP5KE47rj8KYk+0G0t66THueEOciO6qUdl+UZTim3owxeCKKUEVM+Y30PR3ekffMzTplobgP9uHjN3ZphTI5xk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737547804; c=relaxed/simple; bh=Em9k5uZjvJ5p2xnj3pQfXEVSs5SlJfKXpNgQMl4lmAM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LkrY5sep5zojLkGWzLKvn1vxEUZbV2uTGz8L6SrQyAufkYefMyh+x5iSonSXTsh9KcC1bSit0txrA/aTyH9xc4AHAVmKB3ZI3XirPQblRKgfpPkZ4k0hhpt3DJ2gFDjmpfue5jaPDJaw4ql7vvALaXimFYk06NpIL5qBfNl9ZRk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=U1NwQaSs; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="U1NwQaSs" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CAA96C4CEE2; Wed, 22 Jan 2025 12:10:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1737547804; bh=Em9k5uZjvJ5p2xnj3pQfXEVSs5SlJfKXpNgQMl4lmAM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=U1NwQaSsypuNSpBALYbAkcTI6aFed8LJh1oLvdsG6qulvJzoSJpVApcTstLlNNbnY AL9EzvcqYoNK1yXvBPo5+G3JYbiEo16BtxJ/6FWB2HKaitYnBevoYGTdlqqBNGlGfw 8NWiZcKV7tmIM+ZwXrL5GveSkvxwpCeVC6ayfNQAHUdPQPl0dQuHA3EEZPuRLNSc9A KuUQDOVtlVFl8ejyxPL2XBRUpvHL4iURDPFllYaf9xCd5EFwrK6MY8Gw31Ru4kTCHi mRX/CZF3i2xdpnV0IGfvTrM5BemGA8eIqsGI4+E7NHiRz5cQKsI+dXF1YChsL5kvyN OG0Nh5r4nTLCg== From: "Matthieu Baerts (NGI0)" <matttbe@kernel.org> Date: Wed, 22 Jan 2025 13:09:48 +0100 Subject: [PATCH mptcp-net v2 1/2] mptcp: blackhole only if 1st SYN retrans w/o MPC is accepted Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: <mptcp.lists.linux.dev> List-Subscribe: <mailto:mptcp+subscribe@lists.linux.dev> List-Unsubscribe: <mailto:mptcp+unsubscribe@lists.linux.dev> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250122-mpc-no-blackhole-v2-1-13e6670d512f@kernel.org> References: <20250122-mpc-no-blackhole-v2-0-13e6670d512f@kernel.org> In-Reply-To: <20250122-mpc-no-blackhole-v2-0-13e6670d512f@kernel.org> To: mptcp@lists.linux.dev Cc: "Matthieu Baerts (NGI0)" <matttbe@kernel.org> X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1495; i=matttbe@kernel.org; h=from:subject:message-id; bh=Em9k5uZjvJ5p2xnj3pQfXEVSs5SlJfKXpNgQMl4lmAM=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBnkOAaVzaTxKLsq3ggsYBLAiyKecRBYgzdgnSvW Y9BS2hWCP6JAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZ5DgGgAKCRD2t4JPQmmg cwtCEADp0sN/V73bO92rhlru4D41RDlJnrLROoERkFKZvUElRWHfEvi1qC68Judl8b+Bk5K0+d8 2n7dSUXXAL5KpsdaR2jA/rgjUTfqAF5SG7Cq/UlyEyxhLKupnTXZTNRZbgJcJelxa2pbHgi4EI7 NYsxEoQr4/ByKpsExwJhHg9weIxAywI52GLuhJXAQ6kZPBLmJoG7FA9pT++u3EP7R5+742ee8/N qR1yS4/lJ7Y0Mtabrs9FOXAu6DJ+0fI09VHa9vapY18JxNTXQ6CjhF13puhSoJ73/hVbYJNrEEO kOvnIQJNHcnXSqFjobHfIcwr1nAnKfBKMD/03jGRWios7eva070g/lYcOSWuqJMnJPQ0Zv/SAWs aJGZoVgBbXedO2ysiepGh2M3MjpCAA37Z+ji/mLjDFmVISjV0SAyriZN8csj+SRbRJ0NM36Tcrm BQaKVPLQjvalxqDt9XBLo4Rcp2hHLjPPY3jet+Wq7vmWCDIr92cENTODWQTZfevSa0LxrtAULdg 62mFv9hqha2QSN3UHt5eLAP7mhBYkZ72t6ahLIPvqxma6/JG3Mii/cyGQZoqjnuKZ26Z0IsH6om lnc1gy5oDWX9LfqUUbKbflhbMYNXguYpvHwn4mjPel9HoPzhlynDukp/TZbcdGYVBmI5de4xxHG AInBScnDFZ0WDDQ== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 The Fixes commit mentioned this: > An MPTCP firewall blackhole can be detected if the following SYN > retransmission after a fallback to "plain" TCP is accepted. But in fact, this blackhole was detected if any following SYN retransmissions after a fallback to TCP was accepted. That's because 'mptcp_subflow_early_fallback()' will set 'request_mptcp' to 0, and 'mpc_drop' will never be reset to 0 after. This is an issue, because some not so unusual situations might cause the kernel to detect a false-positive blackhole, e.g. a client trying to connect to a server while the network is not ready yet, causing a few SYN retransmissions, before reaching the end server. Fixes: 27069e7cb3d1 ("mptcp: disable active MPTCP in case of blackhole") Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Reviewed-by: Mat Martineau <martineau@kernel.org> --- net/mptcp/ctrl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c index 3999e0ba2c35b50c36ce32277e0b8bfb24197946..2dd81e6c26bdb5220abed68e26d= 70d2dc3ab14fb 100644 --- a/net/mptcp/ctrl.c +++ b/net/mptcp/ctrl.c @@ -418,9 +418,9 @@ void mptcp_active_detect_blackhole(struct sock *ssk, bo= ol expired) MPTCP_INC_STATS(net, MPTCP_MIB_MPCAPABLEACTIVEDROP); subflow->mpc_drop =3D 1; mptcp_subflow_early_fallback(mptcp_sk(subflow->conn), subflow); - } else { - subflow->mpc_drop =3D 0; } + } else if (ssk->sk_state =3D=3D TCP_SYN_SENT) { + subflow->mpc_drop =3D 0; } } =20 --=20 2.47.1 From nobody Wed May 7 08:15:45 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 DE77B212B02 for <mptcp@lists.linux.dev>; Wed, 22 Jan 2025 12:10:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737547806; cv=none; b=Cjjx6f2IJzasJO2Zyj+z5N/WbMYbyEimmMNoDnF/y2vIDXL16h4VPGdXY575hvGqO7VMdIKfT+nFEogXJDsu6EqZxGRhcwGiFS3HbdMz6TdmsOeHhFxVTk8aM2yWla6FVhEBqKgtGp8EpXY4Mr0HdIgsV8NgRNwqH53DHLResVQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737547806; c=relaxed/simple; bh=539lQPpLKOegJWysqZUY7JNi2CwjPn+/shACUmtbl4s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gewmp+gHEr0VYpQ2c0m8Hkvyo6kpw8iMQn0arRgF1CptJ9Cg+3BDS0Sbs0RVIQzEU0CpwmfY1Zpmw4klRJfW9e813tJyiu388y83vW106wxBRPKy0/cJUfV2Krgr7hx+bQAH2GT/zgWwEa0QZHzPGA54eF4hNzJey9pr3QA+qzo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=aSs+EHpp; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="aSs+EHpp" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C8291C4CED6; Wed, 22 Jan 2025 12:10:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1737547805; bh=539lQPpLKOegJWysqZUY7JNi2CwjPn+/shACUmtbl4s=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=aSs+EHppngxdA40GS7XLFSTOMSrgKnnc8pEA1wOjxjFUYKICc+A+sgB9Z8cglgR45 XyP1N65STvRP2TBM3YmzObK0RpdsYA9Q8Kl4xaV+GjQy4aVK/NpMpVxVxhFYi+rA8m pC9xWX/Rptp2iVaMgIW4tiYnvyQcURQYOY6eEq5vYUY0LczkmeggOtpbecdlz/HzrH 3AD4nFKegbTckIAbAHtShkzy9rcquVAo03bAl77hA2X+8HdOpYYaSQmB62tSa3PE0f ZpICM16PgZ00qKrdqL1XsG8CyZDsw5NeqVZKLrdqnx7uwHJS2l5pE0IiBDTAcWWZkt jFeLSBKmKqEkQ== From: "Matthieu Baerts (NGI0)" <matttbe@kernel.org> Date: Wed, 22 Jan 2025 13:09:49 +0100 Subject: [PATCH mptcp-net v2 2/2] mptcp: blackhole: avoid checking the state twice Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: <mptcp.lists.linux.dev> List-Subscribe: <mailto:mptcp+subscribe@lists.linux.dev> List-Unsubscribe: <mailto:mptcp+unsubscribe@lists.linux.dev> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250122-mpc-no-blackhole-v2-2-13e6670d512f@kernel.org> References: <20250122-mpc-no-blackhole-v2-0-13e6670d512f@kernel.org> In-Reply-To: <20250122-mpc-no-blackhole-v2-0-13e6670d512f@kernel.org> To: mptcp@lists.linux.dev Cc: "Matthieu Baerts (NGI0)" <matttbe@kernel.org> X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2477; i=matttbe@kernel.org; h=from:subject:message-id; bh=539lQPpLKOegJWysqZUY7JNi2CwjPn+/shACUmtbl4s=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBnkOAaR13dzKZNxzEA9Ymmr7Ce6apQPW88N2zpL +NrPGaEqjCJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZ5DgGgAKCRD2t4JPQmmg c5vjD/9zeJpVJoT5CLARHvJZV4e/B5vFDJmhS9ob9bfhxrgXM+SdmnVfZud9QLaWksJdSmCFjjX Hmi9g1n0Gi5S5eFYlYBU8PU+qTAKve5oF0O7eLZLp1pkGbkgpTWfmzTGN0k/tHy3544NDulPKHx /kXUF5H+QrGI+C7TceWcI5uV5x6k2SmtP525ZB9Bdw/SK+B/atgX9AbOJp+nK4UGvDkJHFpCWhP uyDpm1O7BRJzmGSIS1qxqhuwPLlktdbZLbDJN6yNnCu84qCotGLdIdrmIgx3HkXpoOBr+gHMe9u 9ITggL2mNP3J7thDtk5O+S4LgmRe4cOGPuT2gIai8/TCnbDsFIq8te3iPdjHs4bSycYm3r/RtBb SEDKF32rdEJmaXsRpTObsoI8n8IH8EcI/tdNrtsfRi9/pCBEo1w1ysSb7SF6r34qXQl7/H/o96J eBMyTzy93kKrxPSySE5kIjHMO8CXQ3i+m2vuRms1/28MTLfnlwBFR5TjE1KhoMevOOpQOa+J6gu z5zcOlZdbZnjTDtZsCA2dVL0hnQ9G6TvW5wHZH4PVGNNTxdlRrYWBpODVMIuVx68DKzSyUVHLPU KB7BIOUGDDIH0PgDKnhDOPvh5xVAUwfZJUkRJzCnPn5btJedlmRgS19ZRO/kPRo8UVH6TcqgAFS Rb9DxGB+ClQZwxg== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 A small cleanup, reordering the conditions to avoid checking things twice. The code here is called in case of timeout on a TCP connection, before triggering a retransmission. But it only acts on SYN + MPC packets. So the conditions can be re-order to exit early in case of non-MPTCP SYN + MPC. This also reduce the indentation levels. Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Reviewed-by: Mat Martineau <martineau@kernel.org> --- Notes: if it is easier, this patch can be squashed in the previous one, and sent as a fix to -net. There will be conflicts with the previous versions, but not complex to fix -- and the new sysctl could even be backported if that's what the stable team prefers. --- net/mptcp/ctrl.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c index 2dd81e6c26bdb5220abed68e26d70d2dc3ab14fb..be6c0237e10bfd7520edd3c57ec= 43ce4377b97d5 100644 --- a/net/mptcp/ctrl.c +++ b/net/mptcp/ctrl.c @@ -401,26 +401,30 @@ void mptcp_active_enable(struct sock *sk) void mptcp_active_detect_blackhole(struct sock *ssk, bool expired) { struct mptcp_subflow_context *subflow; + u8 timeouts, to_max; + struct net *net; =20 - if (!sk_is_mptcp(ssk)) + /* Only check MPTCP SYN ... */ + if (likely(!sk_is_mptcp(ssk) || ssk->sk_state !=3D TCP_SYN_SENT)) return; =20 subflow =3D mptcp_subflow_ctx(ssk); =20 - if (subflow->request_mptcp && ssk->sk_state =3D=3D TCP_SYN_SENT) { - struct net *net =3D sock_net(ssk); - u8 timeouts, to_max; - - timeouts =3D inet_csk(ssk)->icsk_retransmits; - to_max =3D mptcp_get_pernet(net)->syn_retrans_before_tcp_fallback; - - if (timeouts =3D=3D to_max || (timeouts < to_max && expired)) { - MPTCP_INC_STATS(net, MPTCP_MIB_MPCAPABLEACTIVEDROP); - subflow->mpc_drop =3D 1; - mptcp_subflow_early_fallback(mptcp_sk(subflow->conn), subflow); - } - } else if (ssk->sk_state =3D=3D TCP_SYN_SENT) { + /* ... + MP_CAPABLE */ + if (!subflow->request_mptcp) { + /* Mark as blackhole iif the 1st non-MPTCP SYN is accepted */ subflow->mpc_drop =3D 0; + return; + } + + net =3D sock_net(ssk); + timeouts =3D inet_csk(ssk)->icsk_retransmits; + to_max =3D mptcp_get_pernet(net)->syn_retrans_before_tcp_fallback; + + if (timeouts =3D=3D to_max || (timeouts < to_max && expired)) { + MPTCP_INC_STATS(net, MPTCP_MIB_MPCAPABLEACTIVEDROP); + subflow->mpc_drop =3D 1; + mptcp_subflow_early_fallback(mptcp_sk(subflow->conn), subflow); } } =20 --=20 2.47.1