diff options
-rw-r--r-- | queue-6.1/revert-ipv6-save-dontfrag-in-cork.patch | 86 | ||||
-rw-r--r-- | queue-6.1/series | 1 |
2 files changed, 87 insertions, 0 deletions
diff --git a/queue-6.1/revert-ipv6-save-dontfrag-in-cork.patch b/queue-6.1/revert-ipv6-save-dontfrag-in-cork.patch new file mode 100644 index 0000000000..6533d3bfab --- /dev/null +++ b/queue-6.1/revert-ipv6-save-dontfrag-in-cork.patch @@ -0,0 +1,86 @@ +From bacs@librecast.net Wed Jul 2 16:21:13 2025 +From: Brett A C Sheffield <bacs@librecast.net> +Date: Wed, 2 Jul 2025 13:41:51 +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: <20250702114150.2590-2-bacs@librecast.net> + + +From: Brett A C Sheffield (Librecast) <bacs@librecast.net> + +This reverts commit 4f809be95d9f3db13d31c574b8764c8d429f0c3b 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; + }; + + /** +--- a/net/ipv6/ip6_output.c ++++ b/net/ipv6/ip6_output.c +@@ -1450,7 +1450,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); +@@ -1484,7 +1483,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; +@@ -1540,7 +1539,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)) { +@@ -1885,7 +1884,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); + +@@ -2090,7 +2089,7 @@ struct sk_buff *ip6_make_skb(struct sock + err = __ip6_append_data(sk, &queue, cork, &v6_cork, + ¤t->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); diff --git a/queue-6.1/series b/queue-6.1/series index 81d4513edc..eeceacca5a 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -125,3 +125,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 |