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