]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
mptcp: options: reset DSS fields in case of unexpected size
authorMatthieu Baerts (NGI0) <matttbe@kernel.org>
Mon, 3 Aug 2026 16:16:33 +0000 (18:16 +0200)
committerJakub Kicinski <kuba@kernel.org>
Thu, 6 Aug 2026 15:46:22 +0000 (08:46 -0700)
A remote peer could send a malformed DSS with a wrong size, followed by
another DSS or MPC + Data. In this case, the first suboption will be
ignored, but leaving some fields written, which could lead to
inconsistency or access uninitialized data.

Explicitly reset the fields that could have been modified in case of
unexpected size.

Link: https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20260728-net-mptcp-misc-fixes-7-2-rc6-v1-0-f7e2d229159d%40kernel.org?part=1
Fixes: 648ef4b88673 ("mptcp: Implement MPTCP receive path")
Cc: stable@vger.kernel.org
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20260803-net-mptcp-misc-fixes-7-2-rc6-v2-1-b8f496d71664@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/mptcp/options.c

index c664023d37ba8e15b144b2534bc53f65beb2faf7..038eca33c6b1ec52788011ef147469baaca2cb00 100644 (file)
@@ -188,8 +188,14 @@ static void mptcp_parse_option(const struct sk_buff *skb,
                 * RFC 8684 Section 3.3.0 checks later in subflow_data_ready
                 */
                if (opsize != expected_opsize &&
-                   opsize != expected_opsize + TCPOLEN_MPTCP_DSS_CHECKSUM)
+                   opsize != expected_opsize + TCPOLEN_MPTCP_DSS_CHECKSUM) {
+                       mp_opt->dsn64 = 0;
+                       mp_opt->use_map = 0;
+                       mp_opt->ack64 = 0;
+                       mp_opt->use_ack = 0;
+                       mp_opt->data_fin = 0;
                        break;
+               }
 
                mp_opt->suboptions |= OPTION_MPTCP_DSS;
                if (mp_opt->use_ack) {