]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.6-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 2 Jul 2025 14:23:38 +0000 (16:23 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 2 Jul 2025 14:23:38 +0000 (16:23 +0200)
added patches:
revert-ipv6-save-dontfrag-in-cork.patch

queue-6.6/revert-ipv6-save-dontfrag-in-cork.patch [new file with mode: 0644]
queue-6.6/series

diff --git a/queue-6.6/revert-ipv6-save-dontfrag-in-cork.patch b/queue-6.6/revert-ipv6-save-dontfrag-in-cork.patch
new file mode 100644 (file)
index 0000000..9d19bdc
--- /dev/null
@@ -0,0 +1,86 @@
+From bacs@librecast.net  Wed Jul  2 16:20:41 2025
+From: Brett A C Sheffield <bacs@librecast.net>
+Date: Wed,  2 Jul 2025 13:37:32 +0200
+Subject: Revert "ipv6: save dontfrag in cork"
+To: gregkh@linuxfoundation.org
+Cc: regressions@lists.linux.dev, stable@vger.kernel.org, willemb@google.com, Brett A C Sheffield <bacs@librecast.net>
+Message-ID: <20250702113731.2322-2-bacs@librecast.net>
+
+
+From: Brett A C Sheffield (Librecast) <bacs@librecast.net>
+
+This reverts commit 8ebf2709fe4dcd0a1b7b95bf61e529ddcd3cdf51 which is
+commit a18dfa9925b9ef6107ea3aa5814ca3c704d34a8a upstream.
+
+A regression was introduced when backporting this to the stable kernels
+without applying previous commits in this series.
+
+When sending IPv6 UDP packets larger than MTU, EMSGSIZE was returned
+instead of fragmenting the packets as expected.
+
+As there is no compelling reason for this commit to be present in the
+stable kernels it should be reverted.
+
+Signed-off-by: Brett A C Sheffield <bacs@librecast.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ include/linux/ipv6.h  |    1 -
+ net/ipv6/ip6_output.c |    9 ++++-----
+ 2 files changed, 4 insertions(+), 6 deletions(-)
+
+--- a/include/linux/ipv6.h
++++ b/include/linux/ipv6.h
+@@ -199,7 +199,6 @@ struct inet6_cork {
+       struct ipv6_txoptions *opt;
+       u8 hop_limit;
+       u8 tclass;
+-      u8 dontfrag:1;
+ };
+ /* struct ipv6_pinfo - ipv6 private area */
+--- a/net/ipv6/ip6_output.c
++++ b/net/ipv6/ip6_output.c
+@@ -1452,7 +1452,6 @@ static int ip6_setup_cork(struct sock *s
+       }
+       v6_cork->hop_limit = ipc6->hlimit;
+       v6_cork->tclass = ipc6->tclass;
+-      v6_cork->dontfrag = ipc6->dontfrag;
+       if (rt->dst.flags & DST_XFRM_TUNNEL)
+               mtu = np->pmtudisc >= IPV6_PMTUDISC_PROBE ?
+                     READ_ONCE(rt->dst.dev->mtu) : dst_mtu(&rt->dst);
+@@ -1486,7 +1485,7 @@ static int __ip6_append_data(struct sock
+                            int getfrag(void *from, char *to, int offset,
+                                        int len, int odd, struct sk_buff *skb),
+                            void *from, size_t length, int transhdrlen,
+-                           unsigned int flags)
++                           unsigned int flags, struct ipcm6_cookie *ipc6)
+ {
+       struct sk_buff *skb, *skb_prev = NULL;
+       struct inet_cork *cork = &cork_full->base;
+@@ -1542,7 +1541,7 @@ static int __ip6_append_data(struct sock
+       if (headersize + transhdrlen > mtu)
+               goto emsgsize;
+-      if (cork->length + length > mtu - headersize && v6_cork->dontfrag &&
++      if (cork->length + length > mtu - headersize && ipc6->dontfrag &&
+           (sk->sk_protocol == IPPROTO_UDP ||
+            sk->sk_protocol == IPPROTO_ICMPV6 ||
+            sk->sk_protocol == IPPROTO_RAW)) {
+@@ -1914,7 +1913,7 @@ int ip6_append_data(struct sock *sk,
+       return __ip6_append_data(sk, &sk->sk_write_queue, &inet->cork,
+                                &np->cork, sk_page_frag(sk), getfrag,
+-                               from, length, transhdrlen, flags);
++                               from, length, transhdrlen, flags, ipc6);
+ }
+ EXPORT_SYMBOL_GPL(ip6_append_data);
+@@ -2119,7 +2118,7 @@ struct sk_buff *ip6_make_skb(struct sock
+       err = __ip6_append_data(sk, &queue, cork, &v6_cork,
+                               &current->task_frag, getfrag, from,
+                               length + exthdrlen, transhdrlen + exthdrlen,
+-                              flags);
++                              flags, ipc6);
+       if (err) {
+               __ip6_flush_pending_frames(sk, &queue, cork, &v6_cork);
+               return ERR_PTR(err);
index b2e1ce417d7b2502b242c3503d1199695ee3706b..84ca2dc1b05b4a25121fdba4b23b4932da7f4002 100644 (file)
@@ -142,3 +142,4 @@ media-uvcvideo-rollback-non-processed-entities-on-error.patch
 s390-entry-fix-last-breaking-event-handling-in-case-of-stack-corruption.patch
 kunit-to-check-the-longest-symbol-length.patch
 x86-tools-drop-duplicate-unlikely-definition-in-insn_decoder_test.c.patch
+revert-ipv6-save-dontfrag-in-cork.patch