diff --git a/bgpd/bgp_mplsvpn_snmp.c b/bgpd/bgp_mplsvpn_snmp.c index 9b2ab66806..8453133dff 100644 --- a/bgpd/bgp_mplsvpn_snmp.c +++ b/bgpd/bgp_mplsvpn_snmp.c @@ -1124,7 +1124,8 @@ static uint8_t *mplsL3vpnVrfRtTable(struct variable *v, oid name[], struct bgp *l3vpn_bgp; uint32_t rt_index = 0; uint8_t rt_type = 0; - char *rt_b; + char *rt_b = NULL; + static char rt_b_str[BUFSIZ] = {}; if (smux_header_table(v, name, length, exact, var_len, write_method) == MATCH_FAILED) @@ -1156,14 +1157,16 @@ static uint8_t *mplsL3vpnVrfRtTable(struct variable *v, oid name[], ECOMMUNITY_ROUTE_TARGET); break; default: - rt_b = NULL; break; } - if (rt_b) + if (rt_b) { *var_len = strnlen(rt_b, ECOMMUNITY_STRLEN); - else + strlcpy(rt_b_str, rt_b, sizeof(rt_b_str)); + XFREE(MTYPE_ECOMMUNITY_STR, rt_b); + } else { *var_len = 0; - return (uint8_t *)rt_b; + } + return (uint8_t *)rt_b_str; case MPLSL3VPNVRFRTDESCR: /* since we dont have a description generate one */ memset(rt_description, 0, VRF_NAMSIZ + RT_PREAMBLE_SIZE);