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
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
VERSION = 5
|
VERSION = 5
|
||||||
PATCHLEVEL = 15
|
PATCHLEVEL = 15
|
||||||
SUBLEVEL = 42
|
SUBLEVEL = 43
|
||||||
EXTRAVERSION =
|
EXTRAVERSION =
|
||||||
NAME = Trick or Treat
|
NAME = Trick or Treat
|
||||||
|
|
||||||
|
|||||||
@@ -436,7 +436,8 @@ struct mptcp_subflow_context {
|
|||||||
rx_eof : 1,
|
rx_eof : 1,
|
||||||
can_ack : 1, /* only after processing the remote a key */
|
can_ack : 1, /* only after processing the remote a key */
|
||||||
disposable : 1, /* ctx can be free at ulp release time */
|
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;
|
enum mptcp_data_avail data_avail;
|
||||||
u32 remote_nonce;
|
u32 remote_nonce;
|
||||||
u64 thmac;
|
u64 thmac;
|
||||||
|
|||||||
@@ -913,11 +913,14 @@ static enum mapping_status validate_data_csum(struct sock *ssk, struct sk_buff *
|
|||||||
subflow->map_data_csum);
|
subflow->map_data_csum);
|
||||||
if (unlikely(csum)) {
|
if (unlikely(csum)) {
|
||||||
MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_DATACSUMERR);
|
MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_DATACSUMERR);
|
||||||
|
if (subflow->mp_join || subflow->valid_csum_seen) {
|
||||||
subflow->send_mp_fail = 1;
|
subflow->send_mp_fail = 1;
|
||||||
MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_MPFAILTX);
|
MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_MPFAILTX);
|
||||||
|
}
|
||||||
return subflow->mp_join ? MAPPING_INVALID : MAPPING_DUMMY;
|
return subflow->mp_join ? MAPPING_INVALID : MAPPING_DUMMY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
subflow->valid_csum_seen = 1;
|
||||||
return MAPPING_OK;
|
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)
|
static bool subflow_check_data_avail(struct sock *ssk)
|
||||||
{
|
{
|
||||||
struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
|
struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
|
||||||
@@ -1176,7 +1191,7 @@ fallback:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (subflow->mp_join || subflow->fully_established) {
|
if (!subflow_can_fallback(subflow)) {
|
||||||
/* fatal protocol error, close the socket.
|
/* fatal protocol error, close the socket.
|
||||||
* subflow_error_report() will introduce the appropriate barriers
|
* subflow_error_report() will introduce the appropriate barriers
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user