Merge branch 'mptcp-misc-fixes'
Matthieu Baerts says: ==================== mptcp: misc. fixes Here are two unrelated fixes, plus an extra patch: - Patch 1: prevent a warning by removing an unneeded and incorrect small optimisation in the path-manager. A fix for v5.10. - Patch 2: reset a subflow when MPTCP opts have been dropped after having correctly added a new path. A fix for v5.19. - Patch 3: add a safety check to prevent issues like the one fixed by the second patch. ==================== Link: https://patch.msgid.link/20250224-net-mptcp-misc-fixes-v1-0-f550f636b435@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
5568e4ca9a
3 changed files with 3 additions and 19 deletions
|
@ -1514,11 +1514,6 @@ static int mptcp_nl_remove_subflow_and_signal_addr(struct net *net,
|
|||
if (mptcp_pm_is_userspace(msk))
|
||||
goto next;
|
||||
|
||||
if (list_empty(&msk->conn_list)) {
|
||||
mptcp_pm_remove_anno_addr(msk, addr, false);
|
||||
goto next;
|
||||
}
|
||||
|
||||
lock_sock(sk);
|
||||
remove_subflow = mptcp_lookup_subflow_by_saddr(&msk->conn_list, addr);
|
||||
mptcp_pm_remove_anno_addr(msk, addr, remove_subflow &&
|
||||
|
|
|
@ -1199,6 +1199,8 @@ static inline void __mptcp_do_fallback(struct mptcp_sock *msk)
|
|||
pr_debug("TCP fallback already done (msk=%p)\n", msk);
|
||||
return;
|
||||
}
|
||||
if (WARN_ON_ONCE(!READ_ONCE(msk->allow_infinite_fallback)))
|
||||
return;
|
||||
set_bit(MPTCP_FALLBACK_DONE, &msk->flags);
|
||||
}
|
||||
|
||||
|
|
|
@ -1142,7 +1142,6 @@ static enum mapping_status get_mapping_status(struct sock *ssk,
|
|||
if (data_len == 0) {
|
||||
pr_debug("infinite mapping received\n");
|
||||
MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_INFINITEMAPRX);
|
||||
subflow->map_data_len = 0;
|
||||
return MAPPING_INVALID;
|
||||
}
|
||||
|
||||
|
@ -1286,18 +1285,6 @@ static void subflow_sched_work_if_closed(struct mptcp_sock *msk, struct sock *ss
|
|||
mptcp_schedule_work(sk);
|
||||
}
|
||||
|
||||
static bool subflow_can_fallback(struct mptcp_subflow_context *subflow)
|
||||
{
|
||||
struct mptcp_sock *msk = mptcp_sk(subflow->conn);
|
||||
|
||||
if (subflow->mp_join)
|
||||
return false;
|
||||
else if (READ_ONCE(msk->csum_enabled))
|
||||
return !subflow->valid_csum_seen;
|
||||
else
|
||||
return READ_ONCE(msk->allow_infinite_fallback);
|
||||
}
|
||||
|
||||
static void mptcp_subflow_fail(struct mptcp_sock *msk, struct sock *ssk)
|
||||
{
|
||||
struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
|
||||
|
@ -1393,7 +1380,7 @@ fallback:
|
|||
return true;
|
||||
}
|
||||
|
||||
if (!subflow_can_fallback(subflow) && subflow->map_data_len) {
|
||||
if (!READ_ONCE(msk->allow_infinite_fallback)) {
|
||||
/* fatal protocol error, close the socket.
|
||||
* subflow_error_report() will introduce the appropriate barriers
|
||||
*/
|
||||
|
|
Loading…
Add table
Reference in a new issue