commit: 524dd752785285cdda08fbdf09dcff3aa63ae829 Author: Mike Pagano <mpagano <AT> gentoo <DOT> org> AuthorDate: Wed May 25 13:03:39 2022 +0000 Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org> CommitDate: Wed May 25 13:03:39 2022 +0000 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=524dd752
Linux patch 5.15.43 Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org> 0000_README | 4 +++ 1042_linux-5.15.43.patch | 76 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) diff --git a/0000_README b/0000_README index 052e04c5..75beaa27 100644 --- a/0000_README +++ b/0000_README @@ -211,6 +211,10 @@ Patch: 1041_linux-5.15.42.patch From: http://www.kernel.org Desc: Linux 5.15.42 +Patch: 1042_linux-5.15.43.patch +From: http://www.kernel.org +Desc: Linux 5.15.43 + Patch: 1500_XATTR_USER_PREFIX.patch From: https://bugs.gentoo.org/show_bug.cgi?id=470644 Desc: Support for namespace user.pax.* on tmpfs. diff --git a/1042_linux-5.15.43.patch b/1042_linux-5.15.43.patch new file mode 100644 index 00000000..c47e53a3 --- /dev/null +++ b/1042_linux-5.15.43.patch @@ -0,0 +1,76 @@ +diff --git a/Makefile b/Makefile +index 6ad7aabaa7d67..6192e6be49c36 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,7 +1,7 @@ + # SPDX-License-Identifier: GPL-2.0 + VERSION = 5 + PATCHLEVEL = 15 +-SUBLEVEL = 42 ++SUBLEVEL = 43 + EXTRAVERSION = + NAME = Trick or Treat + +diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h +index 72a259a74b575..e193b710b471a 100644 +--- a/net/mptcp/protocol.h ++++ b/net/mptcp/protocol.h +@@ -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; +diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c +index 9c7deffe7cb6e..5ef9013b94c74 100644 +--- a/net/mptcp/subflow.c ++++ b/net/mptcp/subflow.c +@@ -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 + */