mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-23 20:24:12 +08:00
Merge branch 'mptcp-misc-fixes-for-v6-7'
Matthieu Baerts says: ==================== mptcp: misc. fixes for v6.7 Here are a few fixes related to MPTCP: - Patch 1 limits GSO max size to ~64K when MPTCP is being used due to a spec limit. 'gso_max_size' can exceed the max value supported by MPTCP since v5.19. - Patch 2 fixes a possible NULL pointer dereference on close that can happen since v6.7-rc1. - Patch 3 avoids sending a RM_ADDR when the corresponding address is no longer tracked locally. A regression for a fix backported to v5.19. - Patch 4 adds a missing lock when changing the IP TOS with setsockopt(). A fix for v5.17. - Patch 5 fixes an expectation when running MPTCP Join selftest with the checksum option (-C). An issue present since v6.1. ==================== Link: https://lore.kernel.org/r/20231114-upstream-net-20231113-mptcp-misc-fixes-6-7-rc2-v1-0-7b9cd6a7b7f4@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
a133eae83a
@ -1515,8 +1515,9 @@ void mptcp_pm_remove_addrs(struct mptcp_sock *msk, struct list_head *rm_list)
|
||||
struct mptcp_pm_addr_entry *entry;
|
||||
|
||||
list_for_each_entry(entry, rm_list, list) {
|
||||
remove_anno_list_by_saddr(msk, &entry->addr);
|
||||
if (alist.nr < MPTCP_RM_IDS_MAX)
|
||||
if ((remove_anno_list_by_saddr(msk, &entry->addr) ||
|
||||
lookup_subflow_by_saddr(&msk->conn_list, &entry->addr)) &&
|
||||
alist.nr < MPTCP_RM_IDS_MAX)
|
||||
alist.ids[alist.nr++] = entry->addr.id;
|
||||
}
|
||||
|
||||
|
@ -1230,6 +1230,8 @@ static void mptcp_update_infinite_map(struct mptcp_sock *msk,
|
||||
mptcp_do_fallback(ssk);
|
||||
}
|
||||
|
||||
#define MPTCP_MAX_GSO_SIZE (GSO_LEGACY_MAX_SIZE - (MAX_TCP_HEADER + 1))
|
||||
|
||||
static int mptcp_sendmsg_frag(struct sock *sk, struct sock *ssk,
|
||||
struct mptcp_data_frag *dfrag,
|
||||
struct mptcp_sendmsg_info *info)
|
||||
@ -1256,6 +1258,8 @@ static int mptcp_sendmsg_frag(struct sock *sk, struct sock *ssk,
|
||||
return -EAGAIN;
|
||||
|
||||
/* compute send limit */
|
||||
if (unlikely(ssk->sk_gso_max_size > MPTCP_MAX_GSO_SIZE))
|
||||
ssk->sk_gso_max_size = MPTCP_MAX_GSO_SIZE;
|
||||
info->mss_now = tcp_send_mss(ssk, &info->size_goal, info->flags);
|
||||
copy = info->size_goal;
|
||||
|
||||
@ -3398,10 +3402,11 @@ static void mptcp_release_cb(struct sock *sk)
|
||||
if (__test_and_clear_bit(MPTCP_CLEAN_UNA, &msk->cb_flags))
|
||||
__mptcp_clean_una_wakeup(sk);
|
||||
if (unlikely(msk->cb_flags)) {
|
||||
/* be sure to set the current sk state before tacking actions
|
||||
* depending on sk_state, that is processing MPTCP_ERROR_REPORT
|
||||
/* be sure to set the current sk state before taking actions
|
||||
* depending on sk_state (MPTCP_ERROR_REPORT)
|
||||
* On sk release avoid actions depending on the first subflow
|
||||
*/
|
||||
if (__test_and_clear_bit(MPTCP_CONNECTED, &msk->cb_flags))
|
||||
if (__test_and_clear_bit(MPTCP_CONNECTED, &msk->cb_flags) && msk->first)
|
||||
__mptcp_set_connected(sk);
|
||||
if (__test_and_clear_bit(MPTCP_ERROR_REPORT, &msk->cb_flags))
|
||||
__mptcp_error_report(sk);
|
||||
|
@ -738,8 +738,11 @@ static int mptcp_setsockopt_v4_set_tos(struct mptcp_sock *msk, int optname,
|
||||
val = READ_ONCE(inet_sk(sk)->tos);
|
||||
mptcp_for_each_subflow(msk, subflow) {
|
||||
struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
|
||||
bool slow;
|
||||
|
||||
slow = lock_sock_fast(ssk);
|
||||
__ip_sock_set_tos(ssk, val);
|
||||
unlock_sock_fast(ssk, slow);
|
||||
}
|
||||
release_sock(sk);
|
||||
|
||||
|
@ -3240,7 +3240,7 @@ fastclose_tests()
|
||||
if reset_check_counter "fastclose server test" "MPTcpExtMPFastcloseRx"; then
|
||||
test_linkfail=1024 fastclose=server \
|
||||
run_tests $ns1 $ns2 10.0.1.1
|
||||
chk_join_nr 0 0 0
|
||||
chk_join_nr 0 0 0 0 0 0 1
|
||||
chk_fclose_nr 1 1 invert
|
||||
chk_rst_nr 1 1
|
||||
fi
|
||||
|
Loading…
Reference in New Issue
Block a user