]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mptcp: use MPJoinSynAckHMacFailure for SynAck HMAC failure
authorShardul Bankar <shardul.b@mpiricsoftware.com>
Fri, 1 May 2026 19:35:34 +0000 (21:35 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 14 May 2026 13:31:17 +0000 (15:31 +0200)
commit c4a99a921949cddc590b22bb14eeb23dffcc3ba6 upstream.

In subflow_finish_connect(), HMAC validation of the server's HMAC
in SYN/ACK + MP_JOIN increments MPTCP_MIB_JOINACKMAC ("HMAC was
wrong on ACK + MP_JOIN") on failure. The function processes the
SYN/ACK, not the ACK; the matching MPTCP_MIB_JOINSYNACKMAC counter
("HMAC was wrong on SYN/ACK + MP_JOIN") exists but is not
incremented anywhere in the tree.

The mirror site on the server, subflow_syn_recv_sock(), already
uses JOINACKMAC correctly for ACK HMAC failure. Use JOINSYNACKMAC
at the SYN/ACK validation site so each counter reflects the packet
whose HMAC actually failed.

Suggested-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Fixes: fc518953bc9c ("mptcp: add and use MIB counter infrastructure")
Cc: stable@vger.kernel.org
Signed-off-by: Shardul Bankar <shardul.b@mpiricsoftware.com>
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20260501-net-mptcp-misc-fixes-7-1-rc3-v1-1-b70118df778e@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/mptcp/subflow.c

index 4ff5863aa9fdeba878ad944f9d49e463ebaad2bc..1ade4f9f143e757b3cb2988e25e85e8c5e181ce5 100644 (file)
@@ -581,7 +581,7 @@ static void subflow_finish_connect(struct sock *sk, const struct sk_buff *skb)
                         subflow->backup);
 
                if (!subflow_thmac_valid(subflow)) {
-                       MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_JOINACKMAC);
+                       MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_JOINSYNACKMAC);
                        subflow->reset_reason = MPTCP_RST_EMPTCP;
                        goto do_reset;
                }