From 7dcdecb107a5c86c4d9837dbda0b9485c947b583 Mon Sep 17 00:00:00 2001 From: Qing Li Date: Sat, 5 Sep 2009 16:50:55 +0000 Subject: [PATCH] This patch fixes an address scope violation. Considering the scenario where an anycast address is assigned on one interface, and a global address with the same scope is assigned on another interface. In other words, the interface owns the anycast address has only the link-local address as one other address. Without this patch, "ping6" the anycast address from another station will observe the source address of the returned ICMP6 echo reply has the link-local address, not the global address that exists on the other interface in the same node. Reviewed by: bz MFC after: immediately --- sys/netinet6/icmp6.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sys/netinet6/icmp6.c b/sys/netinet6/icmp6.c index 6f13c692d0cc..04810c362739 100644 --- a/sys/netinet6/icmp6.c +++ b/sys/netinet6/icmp6.c @@ -2170,6 +2170,10 @@ icmp6_reflect(struct mbuf *m, size_t off) } } + if ((srcp != NULL) && + (in6_addrscope(srcp) != in6_addrscope(&ip6->ip6_src))) + srcp = NULL; + if (srcp == NULL) { int e; struct sockaddr_in6 sin6;