]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
mptcp: pm: send ACK on an active subflow
authorMatthieu Baerts (NGI0) <matttbe@kernel.org>
Wed, 28 Aug 2024 06:14:27 +0000 (08:14 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 29 Aug 2024 08:39:50 +0000 (10:39 +0200)
Taking the first one on the list doesn't work in some cases, e.g. if the
initial subflow is being removed. Pick another one instead of not
sending anything.

Fixes: 84dfe3677a6f ("mptcp: send out dedicated ADD_ADDR packet")
Cc: stable@vger.kernel.org
Reviewed-by: Mat Martineau <martineau@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
net/mptcp/pm_netlink.c

index 42d4e7b5f65db7b263e94eaa844fc69a0548ce62..ed2205ef72089a2174323cfe9501e356d5e90730 100644 (file)
@@ -765,9 +765,12 @@ void mptcp_pm_nl_addr_send_ack(struct mptcp_sock *msk)
            !mptcp_pm_should_rm_signal(msk))
                return;
 
-       subflow = list_first_entry_or_null(&msk->conn_list, typeof(*subflow), node);
-       if (subflow)
-               mptcp_pm_send_ack(msk, subflow, false, false);
+       mptcp_for_each_subflow(msk, subflow) {
+               if (__mptcp_subflow_active(subflow)) {
+                       mptcp_pm_send_ack(msk, subflow, false, false);
+                       break;
+               }
+       }
 }
 
 int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_sock *msk,