diff mbox series

[net] net:ipv6: Discard next-hop MTU less than minimum link MTU

Message ID 20201007125302.2833-1-geokohma@cisco.com (mailing list archive)
State Not Applicable
Headers show
Series [net] net:ipv6: Discard next-hop MTU less than minimum link MTU | expand

Commit Message

Georg Kohmann (geokohma) Oct. 7, 2020, 12:53 p.m. UTC
When a ICMPV6_PKT_TOOBIG report a next-hop MTU that is less than the IPv6
minimum link MTU, the estimated path MTU is reduced to the minimum link
MTU. This behaviour breaks TAHI IPv6 Core Conformance Test v6LC4.1.6:
Packet Too Big Less than IPv6 MTU.

Referring to RFC 8201 section 4: "If a node receives a Packet Too Big
message reporting a next-hop MTU that is less than the IPv6 minimum link
MTU, it must discard it. A node must not reduce its estimate of the Path
MTU below the IPv6 minimum link MTU on receipt of a Packet Too Big
message."

Drop the path MTU update if reported MTU is less than the minimum link MTU.

Signed-off-by: Georg Kohmann <geokohma@cisco.com>
---
 net/ipv6/route.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Jakub Kicinski Oct. 9, 2020, 11:23 p.m. UTC | #1
On Wed,  7 Oct 2020 14:53:02 +0200 Georg Kohmann wrote:
> When a ICMPV6_PKT_TOOBIG report a next-hop MTU that is less than the IPv6
> minimum link MTU, the estimated path MTU is reduced to the minimum link
> MTU. This behaviour breaks TAHI IPv6 Core Conformance Test v6LC4.1.6:
> Packet Too Big Less than IPv6 MTU.
> 
> Referring to RFC 8201 section 4: "If a node receives a Packet Too Big
> message reporting a next-hop MTU that is less than the IPv6 minimum link
> MTU, it must discard it. A node must not reduce its estimate of the Path
> MTU below the IPv6 minimum link MTU on receipt of a Packet Too Big
> message."
> 
> Drop the path MTU update if reported MTU is less than the minimum link MTU.
> 
> Signed-off-by: Georg Kohmann <geokohma@cisco.com>

Applied, thank you!
diff mbox series

Patch

diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index fb075d9..27430d6 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -2745,7 +2745,8 @@  static void __ip6_rt_update_pmtu(struct dst_entry *dst, const struct sock *sk,
 	if (confirm_neigh)
 		dst_confirm_neigh(dst, daddr);
 
-	mtu = max_t(u32, mtu, IPV6_MIN_MTU);
+	if (mtu < IPV6_MIN_MTU)
+		return;
 	if (mtu >= dst_mtu(dst))
 		return;