Fix regression introduced in r296986.

Currently we don't keep zoneid in in6_ifaddr structure, because there
is still some code, that doesn't properly initialize sin6_scope_id,
but some functions use sa_equal() for addresses comparison. sa_equal()
compares full sockaddr_in6 structures and such comparison will fail.
For now use zero zoneid in in6ifa_ifwithaddr(). It is safe, because
used address is in embedded form. In future we will use zoneid, so mark it
with XXX comment.

Reported by:	kp
Tested by:	kp
This commit is contained in:
Andrey V. Elsukov 2016-04-08 11:13:24 +00:00
parent 5c43c9a105
commit 0b519fe44f

View File

@ -255,7 +255,7 @@ in6_selectsrc(uint32_t fibnum, struct sockaddr_in6 *dstsock,
* ancillary data.
*/
if ((inp->inp_flags & INP_BINDANY) == 0) {
ia = in6ifa_ifwithaddr(&tmp, odstzone);
ia = in6ifa_ifwithaddr(&tmp, 0 /* XXX */);
if (ia == NULL || (ia->ia6_flags & (IN6_IFF_ANYCAST |
IN6_IFF_NOTREADY))) {
if (ia != NULL)