Skip to content

Commit

Permalink
bgpd: Drop double-pointer for bgp_damp_info_free()
Browse files Browse the repository at this point in the history
This causes a crash using `clear ip bgp dampening <prefix>`.

Signed-off-by: Donatas Abraitis <[email protected]>
(cherry picked from commit 19971c9)
  • Loading branch information
ton31337 authored and mergify-bot committed Jul 29, 2021
1 parent 87994b1 commit 250498f
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 15 deletions.
24 changes: 12 additions & 12 deletions bgpd/bgp_damp.c
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ static int bgp_reuse_timer(struct thread *t)
}

if (bdi->penalty <= bdc->reuse_limit / 2.0) {
bgp_damp_info_free(&bdi, bdc, 1, bdi->afi,
bgp_damp_info_free(bdi, bdc, 1, bdi->afi,
bdi->safi);
bgp_reuselist_del(&plist, &node);
} else {
Expand Down Expand Up @@ -425,27 +425,27 @@ int bgp_damp_update(struct bgp_path_info *path, struct bgp_dest *dest,
bdi->t_updated = t_now;
else {
bgp_damp_info_unclaim(bdi);
bgp_damp_info_free(&bdi, bdc, 0, afi, safi);
bgp_damp_info_free(bdi, bdc, 0, afi, safi);
}

return status;
}

void bgp_damp_info_free(struct bgp_damp_info **bdi, struct bgp_damp_config *bdc,
void bgp_damp_info_free(struct bgp_damp_info *bdi, struct bgp_damp_config *bdc,
int withdraw, afi_t afi, safi_t safi)
{
assert(bdc && bdi && *bdi);
assert(bdc && bdi);

if ((*bdi)->path == NULL) {
XFREE(MTYPE_BGP_DAMP_INFO, (*bdi));
if (bdi->path == NULL) {
XFREE(MTYPE_BGP_DAMP_INFO, bdi);
return;
}

(*bdi)->path->extra->damp_info = NULL;
bgp_path_info_unset_flag((*bdi)->dest, (*bdi)->path,
bdi->path->extra->damp_info = NULL;
bgp_path_info_unset_flag(bdi->dest, bdi->path,
BGP_PATH_HISTORY | BGP_PATH_DAMPED);
if ((*bdi)->lastrecord == BGP_RECORD_WITHDRAW && withdraw)
bgp_path_info_delete((*bdi)->dest, (*bdi)->path);
if (bdi->lastrecord == BGP_RECORD_WITHDRAW && withdraw)
bgp_path_info_delete(bdi->dest, bdi->path);
}

static void bgp_damp_parameter_set(int hlife, int reuse, int sup, int maxsup,
Expand Down Expand Up @@ -559,14 +559,14 @@ void bgp_damp_info_clean(struct bgp *bgp, struct bgp_damp_config *bdc,
bdi->safi);
}
bgp_reuselist_del(list, &rn);
bgp_damp_info_free(&bdi, bdc, 1, afi, safi);
bgp_damp_info_free(bdi, bdc, 1, afi, safi);
}
}

while ((rn = SLIST_FIRST(&bdc->no_reuse_list)) != NULL) {
bdi = rn->info;
bgp_reuselist_del(&bdc->no_reuse_list, &rn);
bgp_damp_info_free(&bdi, bdc, 1, afi, safi);
bgp_damp_info_free(bdi, bdc, 1, afi, safi);
}

/* Free decay array */
Expand Down
2 changes: 1 addition & 1 deletion bgpd/bgp_damp.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ extern int bgp_damp_withdraw(struct bgp_path_info *path, struct bgp_dest *dest,
afi_t afi, safi_t safi, int attr_change);
extern int bgp_damp_update(struct bgp_path_info *path, struct bgp_dest *dest,
afi_t afi, safi_t saff);
extern void bgp_damp_info_free(struct bgp_damp_info **path,
extern void bgp_damp_info_free(struct bgp_damp_info *bdi,
struct bgp_damp_config *bdc, int withdraw,
afi_t afi, safi_t safi);
extern void bgp_damp_info_clean(struct bgp *bgp, struct bgp_damp_config *bdc,
Expand Down
4 changes: 2 additions & 2 deletions bgpd/bgp_route.c
Original file line number Diff line number Diff line change
Expand Up @@ -14356,7 +14356,7 @@ static int bgp_clear_damp_route(struct vty *vty, const char *view_name,
if (pi->extra && pi->extra->damp_info) {
pi_temp = pi->next;
bgp_damp_info_free(
&pi->extra->damp_info,
pi->extra->damp_info,
&bgp->damp[afi][safi],
1, afi, safi);
pi = pi_temp;
Expand Down Expand Up @@ -14394,7 +14394,7 @@ static int bgp_clear_damp_route(struct vty *vty, const char *view_name,
bdi->safi);
}
bgp_damp_info_free(
&pi->extra->damp_info,
pi->extra->damp_info,
&bgp->damp[afi][safi],
1, afi, safi);
pi = pi_temp;
Expand Down

0 comments on commit 250498f

Please sign in to comment.