Skip to content

Commit

Permalink
Merge pull request #16521 from opensourcerouting/fix/capability_toggles
Browse files Browse the repository at this point in the history
bgpd: Clear previously allocated capabilities values before parsing a new OPEN
  • Loading branch information
donaldsharp authored Aug 7, 2024
2 parents 975e1a3 + 1d181df commit 0e1088c
Showing 1 changed file with 17 additions and 0 deletions.
17 changes: 17 additions & 0 deletions bgpd/bgp_packet.c
Original file line number Diff line number Diff line change
Expand Up @@ -1804,6 +1804,23 @@ static int bgp_open_receive(struct peer_connection *connection,
mp_capability = 0;
optlen = stream_getc(peer->curr);

/* If we previously had some more capabilities e.g.:
* FQDN, SOFT_VERSION, we MUST clear the values we used
* before, to avoid using stale data.
* Checking peer->cap is enough before checking for the real
* data, but we don't have this check everywhere in the code,
* thus let's clear the data here too before parsing the
* capabilities.
*/
if (peer->hostname)
XFREE(MTYPE_BGP_PEER_HOST, peer->hostname);

if (peer->domainname)
XFREE(MTYPE_BGP_PEER_HOST, peer->domainname);

if (peer->soft_version)
XFREE(MTYPE_BGP_SOFT_VERSION, peer->soft_version);

/* Extended Optional Parameters Length for BGP OPEN Message */
if (optlen == BGP_OPEN_NON_EXT_OPT_LEN
|| CHECK_FLAG(peer->flags, PEER_FLAG_EXTENDED_OPT_PARAMS)) {
Expand Down

0 comments on commit 0e1088c

Please sign in to comment.