| From c6e275b433f88cc6c29d82137bfb537fbd0174a0 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 27 May 2021 16:54:26 -0700 |
| Subject: mptcp: generate subflow hmac after mptcp_finish_join() |
| |
| From: Jianguo Wu <wujianguo@chinatelecom.cn> |
| |
| [ Upstream commit 0a4d8e96e4fd687af92b961d5cdcea0fdbde05fe ] |
| |
| For outgoing subflow join, when recv SYNACK, in subflow_finish_connect(), |
| the mptcp_finish_join() may return false in some cases, and send a RESET |
| to remote, and no local hmac is required. |
| So generate subflow hmac after mptcp_finish_join(). |
| |
| Fixes: ec3edaa7ca6c ("mptcp: Add handling of outgoing MP_JOIN requests") |
| Signed-off-by: Jianguo Wu <wujianguo@chinatelecom.cn> |
| Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com> |
| Signed-off-by: Jakub Kicinski <kuba@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| net/mptcp/subflow.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c |
| index 851fb3d8c791..bba5696fee36 100644 |
| --- a/net/mptcp/subflow.c |
| +++ b/net/mptcp/subflow.c |
| @@ -338,15 +338,15 @@ static void subflow_finish_connect(struct sock *sk, const struct sk_buff *skb) |
| goto do_reset; |
| } |
| |
| + if (!mptcp_finish_join(sk)) |
| + goto do_reset; |
| + |
| subflow_generate_hmac(subflow->local_key, subflow->remote_key, |
| subflow->local_nonce, |
| subflow->remote_nonce, |
| hmac); |
| memcpy(subflow->hmac, hmac, MPTCPOPT_HMAC_LEN); |
| |
| - if (!mptcp_finish_join(sk)) |
| - goto do_reset; |
| - |
| subflow->mp_join = 1; |
| MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_JOINSYNACKRX); |
| } else if (mptcp_check_fallback(sk)) { |
| -- |
| 2.30.2 |
| |