- 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.
This commit is contained in:
Hiroki Sato 2011-06-07 12:00:29 +00:00
parent 08892bf4bf
commit 07a42575b4
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=222820

View File

@ -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);