]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ipv6: use the right ifindex when replying to icmpv6 from localhost
authorFernando Fernandez Mancera <fmancera@suse.de>
Wed, 21 Jan 2026 19:44:08 +0000 (20:44 +0100)
committerJakub Kicinski <kuba@kernel.org>
Sun, 25 Jan 2026 21:16:47 +0000 (13:16 -0800)
When replying to a ICMPv6 echo request that comes from localhost address
the right output ifindex is 1 (lo) and not rt6i_idev dev index. Use the
skb device ifindex instead. This fixes pinging to a local address from
localhost source address.

$ ping6 -I ::1 2001:1:1::2 -c 3
PING 2001:1:1::2 (2001:1:1::2) from ::1 : 56 data bytes
64 bytes from 2001:1:1::2: icmp_seq=1 ttl=64 time=0.037 ms
64 bytes from 2001:1:1::2: icmp_seq=2 ttl=64 time=0.069 ms
64 bytes from 2001:1:1::2: icmp_seq=3 ttl=64 time=0.122 ms

2001:1:1::2 ping statistics
3 packets transmitted, 3 received, 0% packet loss, time 2032ms
rtt min/avg/max/mdev = 0.037/0.076/0.122/0.035 ms

Fixes: 1b70d792cf67 ("ipv6: Use rt6i_idev index for echo replies to a local address")
Signed-off-by: Fernando Fernandez Mancera <fmancera@suse.de>
Reviewed-by: David Ahern <dsahern@kernel.org>
Link: https://patch.msgid.link/20260121194409.6749-1-fmancera@suse.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ipv6/icmp.c

index 5d2f90babaa5f14ea6bd712127e31e891e284130..9d37e7711bc2b8f12c5c2e24b76378c4f3bf401b 100644 (file)
@@ -965,7 +965,9 @@ static enum skb_drop_reason icmpv6_echo_reply(struct sk_buff *skb)
        fl6.daddr = ipv6_hdr(skb)->saddr;
        if (saddr)
                fl6.saddr = *saddr;
-       fl6.flowi6_oif = icmp6_iif(skb);
+       fl6.flowi6_oif = ipv6_addr_loopback(&fl6.daddr) ?
+                        skb->dev->ifindex :
+                        icmp6_iif(skb);
        fl6.fl6_icmp_type = type;
        fl6.flowi6_mark = mark;
        fl6.flowi6_uid = sock_net_uid(net, NULL);