]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mptcp: pm: do not remove closing subflows
authorMatthieu Baerts (NGI0) <matttbe@kernel.org>
Tue, 8 Oct 2024 11:04:55 +0000 (13:04 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 17 Oct 2024 13:12:00 +0000 (15:12 +0200)
commit db0a37b7ac27d8ca27d3dc676a16d081c16ec7b9 upstream.

In a previous fix, the in-kernel path-manager has been modified not to
retrigger the removal of a subflow if it was already closed, e.g. when
the initial subflow is removed, but kept in the subflows list.

To be complete, this fix should also skip the subflows that are in any
closing state: mptcp_close_ssk() will initiate the closure, but the
switch to the TCP_CLOSE state depends on the other peer.

Fixes: 58e1b66b4e4b ("mptcp: pm: do not remove already closed subflows")
Cc: stable@vger.kernel.org
Suggested-by: Paolo Abeni <pabeni@redhat.com>
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20241008-net-mptcp-fallback-fixes-v1-4-c6fb8e93e551@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/mptcp/pm_netlink.c

index c762e3db5ae48ad4f84aaec287999e7b6236acfe..e524171291bc779dbfc713b4931f0f09b1cc815c 100644 (file)
@@ -778,7 +778,8 @@ static void mptcp_pm_nl_rm_addr_or_subflow(struct mptcp_sock *msk,
                        int how = RCV_SHUTDOWN | SEND_SHUTDOWN;
                        u8 id = subflow->local_id;
 
-                       if (inet_sk_state_load(ssk) == TCP_CLOSE)
+                       if ((1 << inet_sk_state_load(ssk)) &
+                           (TCPF_FIN_WAIT1 | TCPF_FIN_WAIT2 | TCPF_CLOSING | TCPF_CLOSE))
                                continue;
 
                        if (rm_type == MPTCP_MIB_RMADDR)