From 3de0e5e1c5fa8cc7ce7ae1b0c13ac41a712d89d5 Mon Sep 17 00:00:00 2001 From: Francois Dumontet Date: Mon, 21 Oct 2024 12:49:50 +0200 Subject: [PATCH] bgpd: fix crash when polling bgp4v2PathAttrTable we have (gdb) p *path->attr->aspath $1 = {refcnt = 3, segments = 0x0, json = 0x0, str = 0x55723d0b7470 "", str_len = 0, asnotation = ASNOTATION_PLAIN} It looks like this aspath is empty, resulting in a size 0 and NULL pointer for path->attr->aspath->segments which leads to the SIGSEGV fixe: return 0 when segments is null. Signed-off-by: Francois Dumontet (cherry picked from commit ee2f1b85cf95fcbfd0a54dc15b911f525e96b163) --- bgpd/bgp_snmp_bgp4v2.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bgpd/bgp_snmp_bgp4v2.c b/bgpd/bgp_snmp_bgp4v2.c index bfad01f66e1b..8862838e0279 100644 --- a/bgpd/bgp_snmp_bgp4v2.c +++ b/bgpd/bgp_snmp_bgp4v2.c @@ -887,7 +887,9 @@ static uint8_t *bgp4v2PathAttrTable(struct variable *v, oid name[], else return SNMP_IPADDRESS(bgp_empty_addr); case BGP4V2_NLRI_AS_PATH_CALC_LENGTH: - return SNMP_INTEGER(path->attr->aspath->segments->length); + return SNMP_INTEGER((path->attr->aspath && path->attr->aspath->segments) + ? path->attr->aspath->segments->length + : 0); case BGP4V2_NLRI_AS_PATH: return aspath_snmp_pathseg(path->attr->aspath, var_len); case BGP4V2_NLRI_PATH_ATTR_UNKNOWN: