commit:     e4ff21ff5a7c7b31bb0b352ce21cc66a9db973be
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Wed May 25 13:09:20 2022 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Wed May 25 13:09:20 2022 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=e4ff21ff

Linux patch 5.17.11

Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>

 0000_README              |  4 +++
 1010_linux-5.17.11.patch | 76 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 80 insertions(+)

diff --git a/0000_README b/0000_README
index fcdbf704..8aed7c53 100644
--- a/0000_README
+++ b/0000_README
@@ -83,6 +83,10 @@ Patch:  1009_linux-5.17.10.patch
 From:   http://www.kernel.org
 Desc:   Linux 5.17.10
 
+Patch:  1010_linux-5.17.11.patch
+From:   http://www.kernel.org
+Desc:   Linux 5.17.11
+
 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/1010_linux-5.17.11.patch b/1010_linux-5.17.11.patch
new file mode 100644
index 00000000..a85749fe
--- /dev/null
+++ b/1010_linux-5.17.11.patch
@@ -0,0 +1,76 @@
+diff --git a/Makefile b/Makefile
+index 318597a4147e0..b821f270a4ca6 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 5
+ PATCHLEVEL = 17
+-SUBLEVEL = 10
++SUBLEVEL = 11
+ EXTRAVERSION =
+ NAME = Superb Owl
+ 
+diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
+index aec767ee047ab..46b343a0b17ea 100644
+--- a/net/mptcp/protocol.h
++++ b/net/mptcp/protocol.h
+@@ -442,7 +442,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 651f01d13191e..8d5ddf8e3ef71 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