svn commit: r222820 - head/usr.sbin/rtadvd

Hiroki Sato hrs at FreeBSD.org
Tue Jun 7 12:00:29 UTC 2011


Author: hrs
Date: Tue Jun  7 12:00:29 2011
New Revision: 222820
URL: http://svn.freebsd.org/changeset/base/222820

Log:
  - Use ELM_MALLOC() for struct rainfo.
  
  - Fix a missing back pointer assignment in struct prefix to struct rainfo
    when addr="" is specified.  This caused SIGSEGV.
  
  - Insert a prefix element to a tail queue after setting parameters.

Modified:
  head/usr.sbin/rtadvd/config.c

Modified: head/usr.sbin/rtadvd/config.c
==============================================================================
--- head/usr.sbin/rtadvd/config.c	Tue Jun  7 11:11:11 2011	(r222819)
+++ head/usr.sbin/rtadvd/config.c	Tue Jun  7 12:00:29 2011	(r222820)
@@ -229,13 +229,7 @@ getconfig(int idx)
 		     __func__, intface);
 	}
 
-	rai = malloc(sizeof(*rai));
-	if (rai == NULL) {
-		syslog(LOG_INFO, "<%s> %s: can't allocate enough memory",
-		    __func__, intface);
-		exit(1);
-	}
-	memset(rai, 0, sizeof(*rai));
+	ELM_MALLOC(rai, exit(1));
 	TAILQ_INIT(&rai->rai_prefix);
 #ifdef ROUTEINFO
 	TAILQ_INIT(&rai->rai_route);
@@ -394,10 +388,7 @@ getconfig(int idx)
 
 		/* allocate memory to store prefix information */
 		ELM_MALLOC(pfx, exit(1));
-
-		/* link into chain */
-		TAILQ_INSERT_TAIL(&rai->rai_prefix, pfx, pfx_next);
-		rai->rai_pfxs++;
+		pfx->pfx_rainfo = rai;
 		pfx->pfx_origin = PREFIX_FROM_CONFIG;
 
 		if (inet_pton(AF_INET6, addr, &pfx->pfx_prefix) != 1) {
@@ -481,6 +472,9 @@ getconfig(int idx)
 			pfx->pfx_pltimeexpire =
 			    now.tv_sec + pfx->pfx_preflifetime;
 		}
+		/* link into chain */
+		TAILQ_INSERT_TAIL(&rai->rai_prefix, pfx, pfx_next);
+		rai->rai_pfxs++;
 	}
 	if (rai->rai_advifprefix && rai->rai_pfxs == 0)
 		get_prefix(rai);


More information about the svn-src-all mailing list