]> www.infradead.org Git - users/willy/pagecache.git/commitdiff
rxrpc: Fix ipv6 path MTU discovery
authorDavid Howells <dhowells@redhat.com>
Wed, 12 Feb 2025 11:21:24 +0000 (11:21 +0000)
committerJakub Kicinski <kuba@kernel.org>
Thu, 13 Feb 2025 18:00:12 +0000 (10:00 -0800)
rxrpc path MTU discovery currently only makes use of ICMPv4, but not
ICMPv6, which means that pmtud for IPv6 doesn't work correctly.  Fix it to
check for ICMPv6 messages also.

Fixes: eeaedc5449d9 ("rxrpc: Implement path-MTU probing using padded PING ACKs (RFC8899)")
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: Simon Horman <horms@kernel.org>
cc: linux-afs@lists.infradead.org
Link: https://patch.msgid.link/3517283.1739359284@warthog.procyon.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/rxrpc/peer_event.c

index e874c31fa90123535e0aee6a20c5a3761fb840a8..bc283da9ee40246ba276b500be399522b09c1045 100644 (file)
@@ -169,6 +169,13 @@ void rxrpc_input_error(struct rxrpc_local *local, struct sk_buff *skb)
                goto out;
        }
 
+       if ((serr->ee.ee_origin == SO_EE_ORIGIN_ICMP6 &&
+            serr->ee.ee_type == ICMPV6_PKT_TOOBIG &&
+            serr->ee.ee_code == 0)) {
+               rxrpc_adjust_mtu(peer, serr->ee.ee_info);
+               goto out;
+       }
+
        rxrpc_store_error(peer, skb);
 out:
        rxrpc_put_peer(peer, rxrpc_peer_put_input_error);