diff options
| author | Paul Jakma <paul.jakma@sun.com> | 2006-10-22 19:13:07 +0000 | 
|---|---|---|
| committer | Paul Jakma <paul.jakma@sun.com> | 2006-10-22 19:13:07 +0000 | 
| commit | 6f58544db526b4dfb09d45f8507926b0ae5fe12b (patch) | |
| tree | f73d22b4ff92eaef337a6d9af8a1923d730e9a21 /bgpd/bgp_route.c | |
| parent | ed3ebfa36b45fe487015e1918e848f0ff4500bff (diff) | |
[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.
Diffstat (limited to 'bgpd/bgp_route.c')
| -rw-r--r-- | bgpd/bgp_route.c | 3 | 
1 files changed, 3 insertions, 0 deletions
| diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 7b369748..3584b21a 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -196,6 +196,9 @@ bgp_info_delete (struct bgp_node *rn, struct bgp_info *ri)  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) | 
