diff options
author | Dag-Erling Smørgrav <des@FreeBSD.org> | 2013-09-08 18:27:26 +0000 |
---|---|---|
committer | Dag-Erling Smørgrav <des@FreeBSD.org> | 2013-09-08 18:27:26 +0000 |
commit | 47da79014ead4da50f44a85932c39ee5d6d5d25e (patch) | |
tree | f46925e171d0a09e949496a2f4b82031eca637e4 | |
parent | 1c1f9c5f396f71fcb983f83d0c4175df7275fb00 (diff) | |
download | src-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.c | 8 | ||||
-rw-r--r-- | usr.sbin/rtadvd/if.c | 4 |
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; |