mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-05 18:42:23 +00:00
bgpd: fix odd memory mgmt in clist strings fn
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
This commit is contained in:
parent
46a9c3af89
commit
aeab4a8013
109
bgpd/bgp_clist.c
109
bgpd/bgp_clist.c
@ -332,141 +332,70 @@ community_list_entry_lookup(struct community_list *list, const void *arg,
|
|||||||
|
|
||||||
static char *community_str_get(struct community *com, int i)
|
static char *community_str_get(struct community *com, int i)
|
||||||
{
|
{
|
||||||
int len;
|
|
||||||
uint32_t comval;
|
uint32_t comval;
|
||||||
uint16_t as;
|
uint16_t as;
|
||||||
uint16_t val;
|
uint16_t val;
|
||||||
char *str;
|
char *str;
|
||||||
char *pnt;
|
|
||||||
|
|
||||||
memcpy(&comval, com_nthval(com, i), sizeof(uint32_t));
|
memcpy(&comval, com_nthval(com, i), sizeof(uint32_t));
|
||||||
comval = ntohl(comval);
|
comval = ntohl(comval);
|
||||||
|
|
||||||
switch (comval) {
|
switch (comval) {
|
||||||
case COMMUNITY_INTERNET:
|
case COMMUNITY_INTERNET:
|
||||||
len = strlen(" internet");
|
str = XSTRDUP(MTYPE_COMMUNITY_STR, "internet");
|
||||||
break;
|
break;
|
||||||
case COMMUNITY_GSHUT:
|
case COMMUNITY_GSHUT:
|
||||||
len = strlen(" graceful-shutdown");
|
str = XSTRDUP(MTYPE_COMMUNITY_STR, "graceful-shutdown");
|
||||||
break;
|
break;
|
||||||
case COMMUNITY_ACCEPT_OWN:
|
case COMMUNITY_ACCEPT_OWN:
|
||||||
len = strlen(" accept-own");
|
str = XSTRDUP(MTYPE_COMMUNITY_STR, "accept-own");
|
||||||
break;
|
break;
|
||||||
case COMMUNITY_ROUTE_FILTER_TRANSLATED_v4:
|
case COMMUNITY_ROUTE_FILTER_TRANSLATED_v4:
|
||||||
len = strlen(" route-filter-translated-v4");
|
str = XSTRDUP(MTYPE_COMMUNITY_STR,
|
||||||
|
"route-filter-translated-v4");
|
||||||
break;
|
break;
|
||||||
case COMMUNITY_ROUTE_FILTER_v4:
|
case COMMUNITY_ROUTE_FILTER_v4:
|
||||||
len = strlen(" route-filter-v4");
|
str = XSTRDUP(MTYPE_COMMUNITY_STR, "route-filter-v4");
|
||||||
break;
|
break;
|
||||||
case COMMUNITY_ROUTE_FILTER_TRANSLATED_v6:
|
case COMMUNITY_ROUTE_FILTER_TRANSLATED_v6:
|
||||||
len = strlen(" route-filter-translated-v6");
|
str = XSTRDUP(MTYPE_COMMUNITY_STR,
|
||||||
|
"route-filter-translated-v6");
|
||||||
break;
|
break;
|
||||||
case COMMUNITY_ROUTE_FILTER_v6:
|
case COMMUNITY_ROUTE_FILTER_v6:
|
||||||
len = strlen(" route-filter-v6");
|
str = XSTRDUP(MTYPE_COMMUNITY_STR, "route-filter-v6");
|
||||||
break;
|
break;
|
||||||
case COMMUNITY_LLGR_STALE:
|
case COMMUNITY_LLGR_STALE:
|
||||||
len = strlen(" llgr-stale");
|
str = XSTRDUP(MTYPE_COMMUNITY_STR, "llgr-stale");
|
||||||
break;
|
break;
|
||||||
case COMMUNITY_NO_LLGR:
|
case COMMUNITY_NO_LLGR:
|
||||||
len = strlen(" no-llgr");
|
str = XSTRDUP(MTYPE_COMMUNITY_STR, "no-llgr");
|
||||||
break;
|
break;
|
||||||
case COMMUNITY_ACCEPT_OWN_NEXTHOP:
|
case COMMUNITY_ACCEPT_OWN_NEXTHOP:
|
||||||
len = strlen(" accept-own-nexthop");
|
str = XSTRDUP(MTYPE_COMMUNITY_STR, "accept-own-nexthop");
|
||||||
break;
|
break;
|
||||||
case COMMUNITY_BLACKHOLE:
|
case COMMUNITY_BLACKHOLE:
|
||||||
len = strlen(" blackhole");
|
str = XSTRDUP(MTYPE_COMMUNITY_STR, "blackhole");
|
||||||
break;
|
break;
|
||||||
case COMMUNITY_NO_EXPORT:
|
case COMMUNITY_NO_EXPORT:
|
||||||
len = strlen(" no-export");
|
str = XSTRDUP(MTYPE_COMMUNITY_STR, "no-export");
|
||||||
break;
|
break;
|
||||||
case COMMUNITY_NO_ADVERTISE:
|
case COMMUNITY_NO_ADVERTISE:
|
||||||
len = strlen(" no-advertise");
|
str = XSTRDUP(MTYPE_COMMUNITY_STR, "no-advertise");
|
||||||
break;
|
break;
|
||||||
case COMMUNITY_LOCAL_AS:
|
case COMMUNITY_LOCAL_AS:
|
||||||
len = strlen(" local-AS");
|
str = XSTRDUP(MTYPE_COMMUNITY_STR, "local-AS");
|
||||||
break;
|
break;
|
||||||
case COMMUNITY_NO_PEER:
|
case COMMUNITY_NO_PEER:
|
||||||
len = strlen(" no-peer");
|
str = XSTRDUP(MTYPE_COMMUNITY_STR, "no-peer");
|
||||||
break;
|
|
||||||
default:
|
|
||||||
len = strlen(" 65536:65535");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Allocate memory. */
|
|
||||||
str = pnt = XMALLOC(MTYPE_COMMUNITY_STR, len);
|
|
||||||
|
|
||||||
switch (comval) {
|
|
||||||
case COMMUNITY_INTERNET:
|
|
||||||
strcpy(pnt, "internet");
|
|
||||||
pnt += strlen("internet");
|
|
||||||
break;
|
|
||||||
case COMMUNITY_GSHUT:
|
|
||||||
strcpy(pnt, "graceful-shutdown");
|
|
||||||
pnt += strlen("graceful-shutdown");
|
|
||||||
break;
|
|
||||||
case COMMUNITY_ACCEPT_OWN:
|
|
||||||
strcpy(pnt, "accept-own");
|
|
||||||
pnt += strlen("accept-own");
|
|
||||||
break;
|
|
||||||
case COMMUNITY_ROUTE_FILTER_TRANSLATED_v4:
|
|
||||||
strcpy(pnt, "route-filter-translated-v4");
|
|
||||||
pnt += strlen("route-filter-translated-v4");
|
|
||||||
break;
|
|
||||||
case COMMUNITY_ROUTE_FILTER_v4:
|
|
||||||
strcpy(pnt, "route-filter-v4");
|
|
||||||
pnt += strlen("route-filter-v4");
|
|
||||||
break;
|
|
||||||
case COMMUNITY_ROUTE_FILTER_TRANSLATED_v6:
|
|
||||||
strcpy(pnt, "route-filter-translated-v6");
|
|
||||||
pnt += strlen("route-filter-translated-v6");
|
|
||||||
break;
|
|
||||||
case COMMUNITY_ROUTE_FILTER_v6:
|
|
||||||
strcpy(pnt, "route-filter-v6");
|
|
||||||
pnt += strlen("route-filter-v6");
|
|
||||||
break;
|
|
||||||
case COMMUNITY_LLGR_STALE:
|
|
||||||
strcpy(pnt, "llgr-stale");
|
|
||||||
pnt += strlen("llgr-stale");
|
|
||||||
break;
|
|
||||||
case COMMUNITY_NO_LLGR:
|
|
||||||
strcpy(pnt, "no-llgr");
|
|
||||||
pnt += strlen("no-llgr");
|
|
||||||
break;
|
|
||||||
case COMMUNITY_ACCEPT_OWN_NEXTHOP:
|
|
||||||
strcpy(pnt, "accept-own-nexthop");
|
|
||||||
pnt += strlen("accept-own-nexthop");
|
|
||||||
break;
|
|
||||||
case COMMUNITY_BLACKHOLE:
|
|
||||||
strcpy(pnt, "blackhole");
|
|
||||||
pnt += strlen("blackhole");
|
|
||||||
break;
|
|
||||||
case COMMUNITY_NO_EXPORT:
|
|
||||||
strcpy(pnt, "no-export");
|
|
||||||
pnt += strlen("no-export");
|
|
||||||
break;
|
|
||||||
case COMMUNITY_NO_ADVERTISE:
|
|
||||||
strcpy(pnt, "no-advertise");
|
|
||||||
pnt += strlen("no-advertise");
|
|
||||||
break;
|
|
||||||
case COMMUNITY_LOCAL_AS:
|
|
||||||
strcpy(pnt, "local-AS");
|
|
||||||
pnt += strlen("local-AS");
|
|
||||||
break;
|
|
||||||
case COMMUNITY_NO_PEER:
|
|
||||||
strcpy(pnt, "no-peer");
|
|
||||||
pnt += strlen("no-peer");
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
str = XSTRDUP(MTYPE_COMMUNITY_STR, "65536:65535");
|
||||||
as = (comval >> 16) & 0xFFFF;
|
as = (comval >> 16) & 0xFFFF;
|
||||||
val = comval & 0xFFFF;
|
val = comval & 0xFFFF;
|
||||||
sprintf(pnt, "%u:%d", as, val);
|
snprintf(str, strlen(str), "%u:%d", as, val);
|
||||||
pnt += strlen(pnt);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
*pnt = '\0';
|
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user