aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/rtadvd/rtadvd.c
diff options
context:
space:
mode:
authorBjoern A. Zeeb <bz@FreeBSD.org>2011-03-02 17:13:07 +0000
committerBjoern A. Zeeb <bz@FreeBSD.org>2011-03-02 17:13:07 +0000
commit5033bae6d0d908a940d61d7704c541e2286bd858 (patch)
tree5f732afa48789643ace8b2ec6a690cfd8243243e /usr.sbin/rtadvd/rtadvd.c
parent8f8ab00ff71b93da0a2aa1465a1ffb48820df1e1 (diff)
downloadsrc-5033bae6d0d908a940d61d7704c541e2286bd858.tar.gz
src-5033bae6d0d908a940d61d7704c541e2286bd858.zip
Prevent crashes from a race when (cloned) interfaces go away.
PR: bin/152143 Submitted by: Przemyslaw Frasunek (przemyslaw frasunek.com) Tested by: Przemyslaw Frasunek (przemyslaw frasunek.com) MFC after: 1 week
Notes
Notes: svn path=/head/; revision=219184
Diffstat (limited to 'usr.sbin/rtadvd/rtadvd.c')
-rw-r--r--usr.sbin/rtadvd/rtadvd.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/usr.sbin/rtadvd/rtadvd.c b/usr.sbin/rtadvd/rtadvd.c
index 654f206909c7..02e3dc70af6b 100644
--- a/usr.sbin/rtadvd/rtadvd.c
+++ b/usr.sbin/rtadvd/rtadvd.c
@@ -667,14 +667,16 @@ rtadvd_input()
}
/*
- * If we happen to receive data on an interface which is now down,
- * just discard the data.
+ * If we happen to receive data on an interface which is now gone
+ * or down, just discard the data.
*/
- if ((iflist[pi->ipi6_ifindex]->ifm_flags & IFF_UP) == 0) {
+ if (iflist[pi->ipi6_ifindex] == NULL ||
+ (iflist[pi->ipi6_ifindex]->ifm_flags & IFF_UP) == 0) {
syslog(LOG_INFO,
"<%s> received data on a disabled interface (%s)",
__func__,
- if_indextoname(pi->ipi6_ifindex, ifnamebuf));
+ (iflist[pi->ipi6_ifindex] == NULL) ? "[gone]" :
+ if_indextoname(pi->ipi6_ifindex, ifnamebuf));
return;
}