[bgpd] struct peer must have bgp field valid (redistribute crash)
2006-10-19 Paul Jakma <paul.jakma@sun.com>
* bgpd.c: (peer_new) bgp element of peer absolutely must be
filled in, make peer_new() require it as argument and update
all callers. Fixes a crash reported by Jan 'yanek' Bortl and
Andrew Schorr where bgpd would crash in bgp_pcount_adjust
trying to dereference the bgp member of bgp->peer_self,
triggered through redistribution.
* bgp_route.c: (bgp_pcount_adjust) assert sanity of arguments.
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index 7b36974..3584b21 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -196,6 +196,9 @@
static void
bgp_pcount_adjust (struct bgp_node *rn, struct bgp_info *ri)
{
+ assert (rn && rn->table);
+ assert (ri && ri->peer && ri->peer->bgp);
+
/* Ignore 'pcount' for RS-client tables */
if (rn->table->type != BGP_TABLE_MAIN
|| ri->peer == ri->peer->bgp->peer_self)