]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: Set AS4 capability received flag only if parsed correctly
authorDonatas Abraitis <donatas@opensourcerouting.org>
Tue, 16 Jan 2024 12:35:10 +0000 (14:35 +0200)
committerDonatas Abraitis <donatas@opensourcerouting.org>
Tue, 16 Jan 2024 12:35:10 +0000 (14:35 +0200)
If we receive a malformed packet, we might end-up with a bad state.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
bgpd/bgp_open.c

index 09f16bbce6eccfea5366b328fa3e637eabb5e5d6..b85e717457861bac73c0c7b9a44cc3a101aa42f6 100644 (file)
@@ -622,8 +622,6 @@ static int bgp_capability_llgr(struct peer *peer,
 /* Unlike other capability parsing routines, this one returns 0 on error */
 static as_t bgp_capability_as4(struct peer *peer, struct capability_header *hdr)
 {
-       SET_FLAG(peer->cap, PEER_CAP_AS4_RCV);
-
        if (hdr->length != CAPABILITY_CODE_AS4_LEN) {
                flog_err(EC_BGP_PKT_OPEN,
                         "%s AS4 capability has incorrect data length %d",
@@ -633,6 +631,8 @@ static as_t bgp_capability_as4(struct peer *peer, struct capability_header *hdr)
 
        as_t as4 = stream_getl(BGP_INPUT(peer));
 
+       SET_FLAG(peer->cap, PEER_CAP_AS4_RCV);
+
        if (BGP_DEBUG(as4, AS4))
                zlog_debug(
                        "%s [AS4] about to set cap PEER_CAP_AS4_RCV, got as4 %u",