]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mptcp: sockopt: set sockopt on all subflows
authorMatthieu Baerts (NGI0) <matttbe@kernel.org>
Tue, 2 Jun 2026 12:14:15 +0000 (22:14 +1000)
committerJakub Kicinski <kuba@kernel.org>
Thu, 4 Jun 2026 02:04:26 +0000 (19:04 -0700)
The mptcp_setsockopt_all_sf(), currently used only with TCP_MAXSEG,
stopped when one subflow returned an error.

Even if it is not wrong, this is different from the other helpers trying
to set the option on all subflows, and then returning an error if at
least one of them had an issue.

Follow this behaviour, for a question of uniformity.

Fixes: 51c5fd09e1b4 ("mptcp: add TCP_MAXSEG sockopt support")
Cc: stable@vger.kernel.org
Reviewed-by: Mat Martineau <martineau@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20260602-net-mptcp-misc-fixes-7-1-rc7-v2-8-856831229976@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/mptcp/sockopt.c

index 91aa57f1d0fd9dcfbd23f572963a16e6460cb096..fcf6feb2a9eb5dbdd4f6b5d2f1bcb4391b9cd94f 100644 (file)
@@ -817,10 +817,11 @@ static int mptcp_setsockopt_all_sf(struct mptcp_sock *msk, int level,
 
        mptcp_for_each_subflow(msk, subflow) {
                struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
+               int err;
 
-               ret = tcp_setsockopt(ssk, level, optname, optval, optlen);
-               if (ret)
-                       break;
+               err = tcp_setsockopt(ssk, level, optname, optval, optlen);
+               if (err < 0 && ret == 0)
+                       ret = err;
        }
 
        if (!ret)