diff --git a/ospfd/ospf_lsa.c b/ospfd/ospf_lsa.c index 7c3be3d..a074244 100644 --- a/ospfd/ospf_lsa.c +++ b/ospfd/ospf_lsa.c @@ -2679,6 +2679,18 @@ ospf_discard_from_db (struct ospf *ospf, { struct ospf_lsa *old; + if (!lsdb) + { + zlog_warn ("%s: Called with NULL lsdb!", __func__); + if (!lsa) + zlog_warn ("%s: and NULL LSA!", __func__); + else + zlog_warn ("LSA[Type%d:%s]: not associated with LSDB!", + lsa->data->type, inet_ntoa (lsa->data->id)); + zlog_backtrace (LOG_WARNING); + return; + } + old = ospf_lsdb_lookup (lsdb, lsa); if (!old) @@ -3014,8 +3026,14 @@ #endif /* ORIGINAL_CODING */ } /* Remove from lsdb. */ - ospf_discard_from_db (ospf, lsa->lsdb, lsa); - ospf_lsdb_delete (lsa->lsdb, lsa); + if (lsa->lsdb) + { + ospf_discard_from_db (ospf, lsa->lsdb, lsa); + ospf_lsdb_delete (lsa->lsdb, lsa); + } + else + zlog_warn ("%s: LSA[Type%d:%s]: No associated LSDB!", __func__, + lsa->data->type, inet_ntoa (lsa->data->id)); } /* A MaxAge LSA must be removed immediately from the router's link diff --git a/ospfd/ospf_lsdb.c b/ospfd/ospf_lsdb.c index c0ec4b3..675e35c 100644 --- a/ospfd/ospf_lsdb.c +++ b/ospfd/ospf_lsdb.c @@ -127,6 +127,24 @@ ospf_lsdb_delete (struct ospf_lsdb *lsdb struct prefix_ls lp; struct route_node *rn; + if (!lsdb) + { + zlog_warn ("%s: Called with NULL LSDB", __func__); + if (lsa) + zlog_warn ("LSA[Type%d:%s]: LSA %p, lsa->lsdb %p", + lsa->data->type, inet_ntoa (lsa->data->id), + lsa, lsa->lsdb); + zlog_backtrace (LOG_WARNING); + return; + } + + if (!lsa) + { + zlog_warn ("%s: Called with NULL LSA", __func__); + zlog_backtrace (LOG_WARNING); + return; + } + table = lsdb->type[lsa->data->type].db; lsdb_prefix_set (&lp, lsa); rn = route_node_lookup (table, (struct prefix *) &lp);