Merge 5.15.43 into android14-5.15
Changes in 5.15.43 mptcp: Do TCP fallback on early DSS checksum failure Linux 5.15.43 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I5536d79dc8ed2b566c4614cd9f7e10896abfc817
This commit is contained in:
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 5
|
||||
PATCHLEVEL = 15
|
||||
SUBLEVEL = 42
|
||||
SUBLEVEL = 43
|
||||
EXTRAVERSION =
|
||||
NAME = Trick or Treat
|
||||
|
||||
|
||||
@@ -436,7 +436,8 @@ struct mptcp_subflow_context {
|
||||
rx_eof : 1,
|
||||
can_ack : 1, /* only after processing the remote a key */
|
||||
disposable : 1, /* ctx can be free at ulp release time */
|
||||
stale : 1; /* unable to snd/rcv data, do not use for xmit */
|
||||
stale : 1, /* unable to snd/rcv data, do not use for xmit */
|
||||
valid_csum_seen : 1; /* at least one csum validated */
|
||||
enum mptcp_data_avail data_avail;
|
||||
u32 remote_nonce;
|
||||
u64 thmac;
|
||||
|
||||
@@ -913,11 +913,14 @@ static enum mapping_status validate_data_csum(struct sock *ssk, struct sk_buff *
|
||||
subflow->map_data_csum);
|
||||
if (unlikely(csum)) {
|
||||
MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_DATACSUMERR);
|
||||
subflow->send_mp_fail = 1;
|
||||
MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_MPFAILTX);
|
||||
if (subflow->mp_join || subflow->valid_csum_seen) {
|
||||
subflow->send_mp_fail = 1;
|
||||
MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_MPFAILTX);
|
||||
}
|
||||
return subflow->mp_join ? MAPPING_INVALID : MAPPING_DUMMY;
|
||||
}
|
||||
|
||||
subflow->valid_csum_seen = 1;
|
||||
return MAPPING_OK;
|
||||
}
|
||||
|
||||
@@ -1099,6 +1102,18 @@ static void subflow_sched_work_if_closed(struct mptcp_sock *msk, struct sock *ss
|
||||
}
|
||||
}
|
||||
|
||||
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 !subflow->fully_established;
|
||||
}
|
||||
|
||||
static bool subflow_check_data_avail(struct sock *ssk)
|
||||
{
|
||||
struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
|
||||
@@ -1176,7 +1191,7 @@ fallback:
|
||||
return true;
|
||||
}
|
||||
|
||||
if (subflow->mp_join || subflow->fully_established) {
|
||||
if (!subflow_can_fallback(subflow)) {
|
||||
/* fatal protocol error, close the socket.
|
||||
* subflow_error_report() will introduce the appropriate barriers
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user