From 651301696e6418e9c927b278f52ad17922ef8610 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Tue, 15 May 2018 13:34:52 -0400 Subject: [PATCH] pbrd: Fix compilation warn -> error The buffer size was insufficiently sized to hold the entirety of the data being passed in. Modify the nht code to use a bit bigger buffer. Signed-off-by: Donald Sharp --- pbrd/pbr_nht.c | 14 +------------- pbrd/pbr_nht.h | 4 +++- pbrd/pbr_vty.c | 4 ++-- 3 files changed, 6 insertions(+), 16 deletions(-) diff --git a/pbrd/pbr_nht.c b/pbrd/pbr_nht.c index 5be96e86d0..a4a9233f72 100644 --- a/pbrd/pbr_nht.c +++ b/pbrd/pbr_nht.c @@ -470,18 +470,6 @@ void pbr_nht_change_group(const char *name) pbr_nht_install_nexthop_group(pnhgc, nhgc->nhg); } -/* - * Since we are writing into the name field which is PBR_MAP_NAMELEN - * size, we are expecting this to field to be at max 100 bytes. - * Newer compilers understand that the %s portion may be up to - * 100 bytes( because of the size of the string. The %u portion - * is expected to be 10 bytes. So in `theory` there are situations - * where we might truncate. The reality this is never going to - * happen( who is going to create a nexthop group name that is - * over say 30 characters? ). As such we are expecting the - * calling function to subtract 10 from the size_t l before - * we pass it in to get around this new gcc fun. - */ char *pbr_nht_nexthop_make_name(char *name, size_t l, uint32_t seqno, char *buffer) { @@ -497,7 +485,7 @@ void pbr_nht_add_individual_nexthop(struct pbr_map_sequence *pbrms) struct pbr_nexthop_cache lookup; memset(&find, 0, sizeof(find)); - pbr_nht_nexthop_make_name(pbrms->parent->name, PBR_MAP_NAMELEN - 10, + pbr_nht_nexthop_make_name(pbrms->parent->name, PBR_NHC_NAMELEN, pbrms->seqno, find.name); if (!pbrms->internal_nhg_name) pbrms->internal_nhg_name = XSTRDUP(MTYPE_TMP, find.name); diff --git a/pbrd/pbr_nht.h b/pbrd/pbr_nht.h index 2cfb076f00..e6fdbfd04c 100644 --- a/pbrd/pbr_nht.h +++ b/pbrd/pbr_nht.h @@ -25,8 +25,10 @@ #include "pbr_map.h" +#define PBR_NHC_NAMELEN PBR_MAP_NAMELEN + 10 + struct pbr_nexthop_group_cache { - char name[PBR_MAP_NAMELEN]; + char name[PBR_NHC_NAMELEN]; uint32_t table_id; diff --git a/pbrd/pbr_vty.c b/pbrd/pbr_vty.c index ba5c49ad5c..0f59a50f74 100644 --- a/pbrd/pbr_vty.c +++ b/pbrd/pbr_vty.c @@ -269,7 +269,7 @@ DEFPY(pbr_map_nexthop, pbr_map_nexthop_cmd, if (pbrms->nhg) nh = nexthop_exists(pbrms->nhg, &nhop); else { - char buf[PBR_MAP_NAMELEN]; + char buf[PBR_NHC_NAMELEN]; if (no) { vty_out(vty, "No nexthops to delete"); @@ -280,7 +280,7 @@ DEFPY(pbr_map_nexthop, pbr_map_nexthop_cmd, pbrms->internal_nhg_name = XSTRDUP(MTYPE_TMP, pbr_nht_nexthop_make_name(pbrms->parent->name, - PBR_MAP_NAMELEN - 10, + PBR_NHC_NAMELEN, pbrms->seqno, buf)); nh = NULL; -- 2.39.5