[Midnightbsd-cvs] src [7524] trunk/sys/netinet6/scope6.c: Check if an extracted zoneid is equal to the non-zero sin6_scope_id only when

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Thu Apr 14 07:27:51 EDT 2016


Revision: 7524
          http://svnweb.midnightbsd.org/src/?rev=7524
Author:   laffer1
Date:     2016-04-14 07:27:50 -0400 (Thu, 14 Apr 2016)
Log Message:
-----------
Check if an extracted zoneid is equal to the non-zero sin6_scope_id only when
it is link-local or MC interface-local.

Obtained from:	FreeBSD, svn rev 243235

Revision Links:
--------------
    http://svnweb.midnightbsd.org/src/?rev=243235

Modified Paths:
--------------
    trunk/sys/netinet6/scope6.c

Modified: trunk/sys/netinet6/scope6.c
===================================================================
--- trunk/sys/netinet6/scope6.c	2016-04-13 00:35:36 UTC (rev 7523)
+++ trunk/sys/netinet6/scope6.c	2016-04-14 11:27:50 UTC (rev 7524)
@@ -374,12 +374,6 @@
 	char ip6buf[INET6_ADDRSTRLEN];
 	u_int32_t zoneid;
 
-	if (sin6->sin6_scope_id != 0) {
-		log(LOG_NOTICE,
-		    "sa6_recoverscope: assumption failure (non 0 ID): %s%%%d\n",
-		    ip6_sprintf(ip6buf, &sin6->sin6_addr), sin6->sin6_scope_id);
-		/* XXX: proceed anyway... */
-	}
 	if (IN6_IS_SCOPE_LINKLOCAL(&sin6->sin6_addr) ||
 	    IN6_IS_ADDR_MC_INTFACELOCAL(&sin6->sin6_addr)) {
 		/*
@@ -392,6 +386,14 @@
 				return (ENXIO);
 			if (!ifnet_byindex(zoneid))
 				return (ENXIO);
+			if (sin6->sin6_scope_id != 0 &&
+			    zoneid != sin6->sin6_scope_id) {
+				log(LOG_NOTICE,
+				    "%s: embedded scope mismatch: %s%%%d. "
+				    "sin6_scope_id was overridden.", __func__,
+				    ip6_sprintf(ip6buf, &sin6->sin6_addr),
+				    sin6->sin6_scope_id);
+			}
 			sin6->sin6_addr.s6_addr16[1] = 0;
 			sin6->sin6_scope_id = zoneid;
 		}



More information about the Midnightbsd-cvs mailing list