diff options
-rw-r--r-- | queue-5.10/revert-ipv6-save-dontfrag-in-cork.patch | 86 | ||||
-rw-r--r-- | queue-5.10/series | 1 |
2 files changed, 87 insertions, 0 deletions
diff --git a/queue-5.10/revert-ipv6-save-dontfrag-in-cork.patch b/queue-5.10/revert-ipv6-save-dontfrag-in-cork.patch new file mode 100644 index 0000000000..e127a9ab6e --- /dev/null +++ b/queue-5.10/revert-ipv6-save-dontfrag-in-cork.patch @@ -0,0 +1,86 @@ +From bacs@librecast.net Wed Jul 2 16:21:59 2025 +From: Brett A C Sheffield <bacs@librecast.net> +Date: Wed, 2 Jul 2025 13:41:14 +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: <20250702114113.2512-2-bacs@librecast.net> + + +From: Brett A C Sheffield (Librecast) <bacs@librecast.net> + +This reverts commit 29533d1a54b8de5aaf8c4aa6790dc67d5c14fba5 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 +@@ -189,7 +189,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 +@@ -1416,7 +1416,6 @@ static int ip6_setup_cork(struct sock *s + cork->fl.u.ip6 = *fl6; + 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); +@@ -1451,7 +1450,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; + unsigned int maxfraglen, fragheaderlen, mtu, orig_mtu, pmtu; +@@ -1508,7 +1507,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_RAW)) { + ipv6_local_rxpmtu(sk, fl6, mtu - headersize + +@@ -1826,7 +1825,7 @@ int ip6_append_data(struct sock *sk, + + return __ip6_append_data(sk, fl6, &sk->sk_write_queue, &inet->cork.base, + &np->cork, sk_page_frag(sk), getfrag, +- from, length, transhdrlen, flags); ++ from, length, transhdrlen, flags, ipc6); + } + EXPORT_SYMBOL_GPL(ip6_append_data); + +@@ -2021,7 +2020,7 @@ struct sk_buff *ip6_make_skb(struct sock + err = __ip6_append_data(sk, fl6, &queue, &cork->base, &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-5.10/series b/queue-5.10/series index 23d489d711..61d6145bda 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -76,3 +76,4 @@ drm-bridge-cdns-dsi-check-return-value-when-getting-default-phy-config.patch drm-bridge-cdns-dsi-wait-for-clk-and-data-lanes-to-be-ready.patch pci-hv-do-not-set-pci_command_memory-to-reduce-vm-boot-time.patch s390-add-std-gnu11-to-decompressor-and-purgatory-cflags.patch +revert-ipv6-save-dontfrag-in-cork.patch |