Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 18 Nov 2012 16:06:51 +0000 (UTC)
From:      Hiroki Sato <hrs@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r243235 - head/sys/netinet6
Message-ID:  <201211181606.qAIG6pWO060151@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: hrs
Date: Sun Nov 18 16:06:51 2012
New Revision: 243235
URL: http://svnweb.freebsd.org/changeset/base/243235

Log:
  Check if an extracted zoneid is equal to the non-zero sin6_scope_id only when
  it is link-local or MC interface-local.

Modified:
  head/sys/netinet6/scope6.c

Modified: head/sys/netinet6/scope6.c
==============================================================================
--- head/sys/netinet6/scope6.c	Sun Nov 18 15:48:34 2012	(r243234)
+++ head/sys/netinet6/scope6.c	Sun Nov 18 16:06:51 2012	(r243235)
@@ -369,12 +369,6 @@ sa6_recoverscope(struct sockaddr_in6 *si
 	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)) {
 		/*
@@ -387,6 +381,14 @@ sa6_recoverscope(struct sockaddr_in6 *si
 				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;
 		}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201211181606.qAIG6pWO060151>