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
+                */

Reply via email to