aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDag-Erling Smørgrav <des@FreeBSD.org>2013-09-08 18:27:26 +0000
committerDag-Erling Smørgrav <des@FreeBSD.org>2013-09-08 18:27:26 +0000
commit47da79014ead4da50f44a85932c39ee5d6d5d25e (patch)
treef46925e171d0a09e949496a2f4b82031eca637e4
parent1c1f9c5f396f71fcb983f83d0c4175df7275fb00 (diff)
downloadsrc-47da79014ead4da50f44a85932c39ee5d6d5d25e.tar.gz
src-47da79014ead4da50f44a85932c39ee5d6d5d25e.zip
MFH (r254684, r254955): fix segfault on reload.
MFH (r255156): silence an error message on non-IPv6 interfaces. Approved by: re (glebius)
Notes
Notes: svn path=/releng/9.2/; revision=255398
-rw-r--r--usr.sbin/rtadvd/config.c8
-rw-r--r--usr.sbin/rtadvd/if.c4
2 files changed, 5 insertions, 7 deletions
diff --git a/usr.sbin/rtadvd/config.c b/usr.sbin/rtadvd/config.c
index 681611f49514..595ad0d3b62f 100644
--- a/usr.sbin/rtadvd/config.c
+++ b/usr.sbin/rtadvd/config.c
@@ -296,10 +296,8 @@ rm_rainfo(struct rainfo *rai)
if (rai->rai_ra_data != NULL)
free(rai->rai_ra_data);
- while ((pfx = TAILQ_FIRST(&rai->rai_prefix)) != NULL) {
- TAILQ_REMOVE(&rai->rai_prefix, pfx, pfx_next);
- free(pfx);
- }
+ while ((pfx = TAILQ_FIRST(&rai->rai_prefix)) != NULL)
+ delete_prefix(pfx);
while ((sol = TAILQ_FIRST(&rai->rai_soliciter)) != NULL) {
TAILQ_REMOVE(&rai->rai_soliciter, sol, sol_next);
free(sol);
@@ -1123,9 +1121,9 @@ add_prefix(struct rainfo *rai, struct in6_prefixreq *ipr)
pfx->pfx_onlinkflg = ipr->ipr_raf_onlink;
pfx->pfx_autoconfflg = ipr->ipr_raf_auto;
pfx->pfx_origin = PREFIX_FROM_DYNAMIC;
+ pfx->pfx_rainfo = rai;
TAILQ_INSERT_TAIL(&rai->rai_prefix, pfx, pfx_next);
- pfx->pfx_rainfo = rai;
syslog(LOG_DEBUG, "<%s> new prefix %s/%d was added on %s",
__func__,
diff --git a/usr.sbin/rtadvd/if.c b/usr.sbin/rtadvd/if.c
index b857356a2580..5413cdf4b80c 100644
--- a/usr.sbin/rtadvd/if.c
+++ b/usr.sbin/rtadvd/if.c
@@ -394,8 +394,8 @@ update_ifinfo_nd_flags(struct ifinfo *ifi)
error = ioctl(s, SIOCGIFINFO_IN6, (caddr_t)&nd);
if (error) {
close(s);
- syslog(LOG_ERR,
- "<%s> ioctl() failed.", __func__);
+ if (errno != EPFNOSUPPORT)
+ syslog(LOG_ERR, "<%s> ioctl() failed.", __func__);
return (1);
}
ifi->ifi_nd_flags = nd.ndi.flags;