summaryrefslogtreecommitdiff
path: root/usr.sbin/ospfd/ospfd.c
diff options
context:
space:
mode:
authorClaudio Jeker <claudio@cvs.openbsd.org>2015-03-14 02:22:10 +0000
committerClaudio Jeker <claudio@cvs.openbsd.org>2015-03-14 02:22:10 +0000
commitf652b362e18f1a5bbd456fdfbe5f3fa40e645938 (patch)
tree6ea3e4aa4850e4c944b277be8aed326367f9c84f /usr.sbin/ospfd/ospfd.c
parent135c8122311da1b7ed10aa8e4ce010732352c022 (diff)
When removing interfaces in the RDE we also need to remove all the RDE
neighbors that are part of that interface or we open us up to use after free situations like the one found by sthen@. Diff makes sense sthen@
Diffstat (limited to 'usr.sbin/ospfd/ospfd.c')
-rw-r--r--usr.sbin/ospfd/ospfd.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/usr.sbin/ospfd/ospfd.c b/usr.sbin/ospfd/ospfd.c
index 39ee9d67db7..48707cc752f 100644
--- a/usr.sbin/ospfd/ospfd.c
+++ b/usr.sbin/ospfd/ospfd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ospfd.c,v 1.83 2015/02/10 05:24:48 claudio Exp $ */
+/* $OpenBSD: ospfd.c,v 1.84 2015/03/14 02:22:09 claudio Exp $ */
/*
* Copyright (c) 2005 Claudio Jeker <claudio@openbsd.org>
@@ -821,6 +821,8 @@ merge_interfaces(struct area *a, struct area *xa)
i->name);
if (ospfd_process == PROC_OSPF_ENGINE)
if_fsm(i, IF_EVT_DOWN);
+ else if (ospfd_process == PROC_RDE_ENGINE)
+ rde_nbr_iface_del(i);
LIST_REMOVE(i, entry);
if_del(i);
}