From f11b863d69e62d54168d75f3cc2018103b9a7e34 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Tue, 15 Dec 2015 05:22:48 -0800 Subject: [PATCH] zebra: Fix crash in connected.c due to RA change Back out original null pointer fix targeted it was the wrong fix. Basically when a ip address is deleted the RA code was waiting till after the connected pointer was deleted to set the RA appropriately. Signed-off-by: Donald Sharp Reviewed-by: Daniel Walton --- zebra/connected.c | 8 ++++---- zebra/interface.c | 3 --- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/zebra/connected.c b/zebra/connected.c index b2fababc1b..f040e9d362 100644 --- a/zebra/connected.c +++ b/zebra/connected.c @@ -67,15 +67,15 @@ connected_withdraw (struct connected *ifc) /* The address is not in the kernel anymore, so clear the flag */ UNSET_FLAG(ifc->conf, ZEBRA_IFC_QUEUED); + /* Enable RA suppression if there are no IPv6 addresses on this interface */ + if (! ipv6_address_configured(ifc->ifp)) + ipv6_nd_suppress_ra_set (ifc->ifp, RA_SUPPRESS); + if (!CHECK_FLAG (ifc->conf, ZEBRA_IFC_CONFIGURED)) { listnode_delete (ifc->ifp->connected, ifc); connected_free (ifc); } - - /* Enable RA suppression if there are no IPv6 addresses on this interface */ - if (! ipv6_address_configured(ifc->ifp)) - ipv6_nd_suppress_ra_set (ifc->ifp, RA_SUPPRESS); } static void diff --git a/zebra/interface.c b/zebra/interface.c index dcbc5a3b95..cb4645c2f1 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -1770,9 +1770,6 @@ ipv6_address_configured (struct interface *ifp) struct connected *connected; struct listnode *node; - if (!ifp) - return 0; - for (ALL_LIST_ELEMENTS_RO (ifp->connected, node, connected)) if (CHECK_FLAG (connected->conf, ZEBRA_IFC_REAL) && (connected->address->family == AF_INET6)) return 1;