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);
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to