svn commit: r186109 - in projects/arpv2_merge_1/sys: netinet netinet6

Kip Macy kmacy at FreeBSD.org
Sun Dec 14 18:06:03 PST 2008


Author: kmacy
Date: Mon Dec 15 02:06:02 2008
New Revision: 186109
URL: http://svn.freebsd.org/changeset/base/186109

Log:
  move LLE_VALID check earlier in the loop to avoid passing
  invalid entries back to userland

Modified:
  projects/arpv2_merge_1/sys/netinet/in.c
  projects/arpv2_merge_1/sys/netinet6/in6.c

Modified: projects/arpv2_merge_1/sys/netinet/in.c
==============================================================================
--- projects/arpv2_merge_1/sys/netinet/in.c	Mon Dec 15 01:44:23 2008	(r186108)
+++ projects/arpv2_merge_1/sys/netinet/in.c	Mon Dec 15 02:06:02 2008	(r186109)
@@ -1185,8 +1185,10 @@ in_lltable_dump(struct lltable *llt, str
 	error = 0;
 	for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) {
 		LIST_FOREACH(lle, &llt->lle_head[i], lle_next) {
+			struct sockaddr_dl *sdl;
+			
 			/* skip deleted entries */
-			if (lle->la_flags & LLE_DELETED)
+			if ((lle->la_flags & (LLE_DELETED|LLE_VALID)) != LLE_VALID)
 				continue;
 			/*
 			 * produce a msg made of:
@@ -1196,7 +1198,6 @@ in_lltable_dump(struct lltable *llt, str
 			 */
 			bzero(&arpc, sizeof(arpc));
 			arpc.rtm.rtm_msglen = sizeof(arpc);
-
 			arpc.sin.sin_family = AF_INET;
 			arpc.sin.sin_len = sizeof(arpc.sin);
 			arpc.sin.sin_addr.s_addr = SIN(lle)->sin_addr.s_addr;
@@ -1209,16 +1210,14 @@ in_lltable_dump(struct lltable *llt, str
 					arpc.sin.sin_other = SIN_PROXY;
 			}
 
-			if (lle->la_flags & LLE_VALID) { /* valid MAC */
-				struct sockaddr_dl *sdl = &arpc.sdl;
+			sdl = &arpc.sdl;
+			sdl->sdl_family = AF_LINK;
+			sdl->sdl_len = sizeof(*sdl);
+			sdl->sdl_alen = ifp->if_addrlen;
+			sdl->sdl_index = ifp->if_index;
+			sdl->sdl_type = ifp->if_type;
+			bcopy(&lle->ll_addr, LLADDR(sdl), ifp->if_addrlen);
 
-				sdl->sdl_family = AF_LINK;
-				sdl->sdl_len = sizeof(*sdl);
-				sdl->sdl_alen = ifp->if_addrlen;
-				sdl->sdl_index = ifp->if_index;
-				sdl->sdl_type = ifp->if_type;
-				bcopy(&lle->ll_addr, LLADDR(sdl), ifp->if_addrlen);
-			}
 			arpc.rtm.rtm_rmx.rmx_expire =
 			    lle->la_flags & LLE_STATIC ? 0 : lle->la_expire;
 			arpc.rtm.rtm_flags |= RTF_HOST;

Modified: projects/arpv2_merge_1/sys/netinet6/in6.c
==============================================================================
--- projects/arpv2_merge_1/sys/netinet6/in6.c	Mon Dec 15 01:44:23 2008	(r186108)
+++ projects/arpv2_merge_1/sys/netinet6/in6.c	Mon Dec 15 02:06:02 2008	(r186109)
@@ -2242,8 +2242,10 @@ in6_lltable_dump(struct lltable *llt, st
 	error = 0;
 	for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) {
 		LIST_FOREACH(lle, &llt->lle_head[i], lle_next) {
-			/* skip deleted entries */
-			if (lle->la_flags & LLE_DELETED)
+			struct sockaddr_dl *sdl;
+
+			/* skip deleted or invalid entries */
+			if ((lle->la_flags & (LLE_DELETED|LLE_VALID)) != LLE_VALID)
 				continue;
 			/*
 			 * produce a msg made of:
@@ -2253,7 +2255,6 @@ in6_lltable_dump(struct lltable *llt, st
 			 */
 			bzero(&ndpc, sizeof(ndpc));
 			ndpc.rtm.rtm_msglen = sizeof(ndpc);
-
 			ndpc.sin6.sin6_family = AF_INET6;
 			ndpc.sin6.sin6_len = sizeof(ndpc.sin6);
 			bcopy(L3_ADDR(lle), &ndpc.sin6, L3_ADDR_LEN(lle));
@@ -2262,16 +2263,13 @@ in6_lltable_dump(struct lltable *llt, st
 			if (lle->la_flags & LLE_PUB)
 				ndpc.rtm.rtm_flags |= RTF_ANNOUNCE;
 
-			if (lle->la_flags & LLE_VALID) { /* valid MAC */
-				struct sockaddr_dl *sdl = &ndpc.sdl;
-
-				sdl->sdl_family = AF_LINK;
-				sdl->sdl_len = sizeof(*sdl);
-				sdl->sdl_alen = ifp->if_addrlen;
-				sdl->sdl_index = ifp->if_index;
-				sdl->sdl_type = ifp->if_type;
-				bcopy(&lle->ll_addr, LLADDR(sdl), ifp->if_addrlen);
-			}
+			sdl = &ndpc.sdl;
+			sdl->sdl_family = AF_LINK;
+			sdl->sdl_len = sizeof(*sdl);
+			sdl->sdl_alen = ifp->if_addrlen;
+			sdl->sdl_index = ifp->if_index;
+			sdl->sdl_type = ifp->if_type;
+			bcopy(&lle->ll_addr, LLADDR(sdl), ifp->if_addrlen);
 			ndpc.rtm.rtm_rmx.rmx_expire =
 			    lle->la_flags & LLE_STATIC ? 0 : lle->la_expire;
 			ndpc.rtm.rtm_flags |= RTF_HOST;


More information about the svn-src-projects mailing list