[Midnightbsd-cvs] src [9417] trunk/sys: - recover missing arp_ifinit() call.

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Sat Mar 4 17:48:42 EST 2017


Revision: 9417
          http://svnweb.midnightbsd.org/src/?rev=9417
Author:   laffer1
Date:     2017-03-04 17:48:42 -0500 (Sat, 04 Mar 2017)
Log Message:
-----------
- recover missing arp_ifinit() call.
- plug static llentry leak (ipv4 & ipv6 were affected).

Modified Paths:
--------------
    trunk/sys/net/if_vlan.c
    trunk/sys/netinet/in.c
    trunk/sys/netinet6/in6.c

Modified: trunk/sys/net/if_vlan.c
===================================================================
--- trunk/sys/net/if_vlan.c	2017-03-04 22:48:13 UTC (rev 9416)
+++ trunk/sys/net/if_vlan.c	2017-03-04 22:48:42 UTC (rev 9417)
@@ -42,6 +42,7 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD: stable/9/sys/net/if_vlan.c 248085 2013-03-09 02:36:32Z marius $");
 
+#include "opt_inet.h"
 #include "opt_vlan.h"
 
 #include <sys/param.h>
@@ -67,6 +68,11 @@
 #include <net/if_vlan_var.h>
 #include <net/vnet.h>
 
+#ifdef INET
+#include <netinet/in.h>
+#include <netinet/if_ether.h>
+#endif
+
 #define VLANNAME	"vlan"
 #define	VLAN_DEF_HWIDTH	4
 #define	VLAN_IFFLAGS	(IFF_BROADCAST | IFF_MULTICAST)

Modified: trunk/sys/netinet/in.c
===================================================================
--- trunk/sys/netinet/in.c	2017-03-04 22:48:13 UTC (rev 9416)
+++ trunk/sys/netinet/in.c	2017-03-04 22:48:42 UTC (rev 9417)
@@ -1529,10 +1529,14 @@
 			LLE_WLOCK(lle);
 			lle->la_flags |= LLE_DELETED;
 			EVENTHANDLER_INVOKE(arp_update_event, lle);
-			LLE_WUNLOCK(lle);
 #ifdef DIAGNOSTIC
-			log(LOG_INFO, "ifaddr cache = %p  is deleted\n", lle);
+			log(LOG_INFO, "ifaddr cache = %p is deleted\n", lle);
 #endif
+			if ((lle->la_flags &
+			    (LLE_STATIC | LLE_IFADDR)) == LLE_STATIC)
+				llentry_free(lle);
+			else
+				LLE_WUNLOCK(lle);
 		}
 		lle = (void *)-1;
 

Modified: trunk/sys/netinet6/in6.c
===================================================================
--- trunk/sys/netinet6/in6.c	2017-03-04 22:48:13 UTC (rev 9416)
+++ trunk/sys/netinet6/in6.c	2017-03-04 22:48:42 UTC (rev 9417)
@@ -195,10 +195,10 @@
 
 	ia = ifa2ia6(ifa);
 	ifp = ifa->ifa_ifp;
-	IF_AFDATA_LOCK(ifp);
-	lla_lookup(LLTABLE6(ifp), (LLE_DELETE | LLE_IFADDR),
-	    (struct sockaddr *)&ia->ia_addr);
-	IF_AFDATA_UNLOCK(ifp);
+	memcpy(&addr, &ia->ia_addr, sizeof(ia->ia_addr));
+	memcpy(&mask, &ia->ia_prefixmask, sizeof(ia->ia_prefixmask));
+	lltable_prefix_free(AF_INET6, (struct sockaddr *)&addr,
+	            (struct sockaddr *)&mask, LLE_STATIC);
 
 	/*
 	 * initialize for rtmsg generation
@@ -210,8 +210,6 @@
 	gateway.sdl_alen = ifp->if_addrlen;
 	bzero(&rt0, sizeof(rt0));
 	rt0.rt_gateway = (struct sockaddr *)&gateway;
-	memcpy(&mask, &ia->ia_prefixmask, sizeof(ia->ia_prefixmask));
-	memcpy(&addr, &ia->ia_addr, sizeof(ia->ia_addr));
 	rt_mask(&rt0) = (struct sockaddr *)&mask;
 	rt_key(&rt0) = (struct sockaddr *)&addr;
 	rt0.rt_flags = RTF_HOST | RTF_STATIC;
@@ -2582,10 +2580,14 @@
 		if (!(lle->la_flags & LLE_IFADDR) || (flags & LLE_IFADDR)) {
 			LLE_WLOCK(lle);
 			lle->la_flags |= LLE_DELETED;
-			LLE_WUNLOCK(lle);
 #ifdef DIAGNOSTIC
-			log(LOG_INFO, "ifaddr cache = %p  is deleted\n", lle);
+			log(LOG_INFO, "ifaddr cache = %p is deleted\n", lle);
 #endif
+			if ((lle->la_flags &
+			    (LLE_STATIC | LLE_IFADDR)) == LLE_STATIC)
+				llentry_free(lle);
+			else
+				LLE_WUNLOCK(lle);
 		}
 		lle = (void *)-1;
 	}



More information about the Midnightbsd-cvs mailing list