bgpd: Clear previously allocated capabilities values before parsing a new OPEN

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
This commit is contained in:
Donatas Abraitis 2024-08-06 18:19:40 +03:00
parent 975e1a36f6
commit 1d181dfb98

View File

@ -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)) {