Fix ICMPv6 redirects
icmp6_redirect_input() validates that a redirect packet came from the current gateway for the respective destination. To do this, it compares the source address, which has an embedded scope zone id, to the next-hop address, which does not. If the address is link-local, which should be the case, the comparison fails and the redirect is ignored. Insert the scope zone id into the next-hop address so the comparison is accurate. Unsurprisingly, this fixes 35 UNH IPv6 conformance test cases. Submitted by: Farrell Woods <Farrell_Woods@Dell.com> (initial revision) Reviewed by: ae melifaro dab MFC after: 1 week Relnotes: yes Sponsored by: Dell EMC Differential Revision: https://reviews.freebsd.org/D14254
This commit is contained in:
parent
31461aa2f1
commit
43105e589a
@ -2305,6 +2305,14 @@ icmp6_redirect_input(struct mbuf *m, int off)
|
||||
goto bad;
|
||||
}
|
||||
|
||||
/*
|
||||
* Embed scope zone id into next hop address, since
|
||||
* fib6_lookup_nh_basic() returns address without embedded
|
||||
* scope zone id.
|
||||
*/
|
||||
if (in6_setscope(&nh6.nh_addr, m->m_pkthdr.rcvif, NULL))
|
||||
goto freeit;
|
||||
|
||||
if (IN6_ARE_ADDR_EQUAL(&src6, &nh6.nh_addr) == 0) {
|
||||
nd6log((LOG_ERR,
|
||||
"ICMP6 redirect rejected; "
|
||||
|
Loading…
Reference in New Issue
Block a user