summaryrefslogtreecommitdiffstats
path: root/bgpd/bgp_encap_tlv.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2017-10-19 00:37:38 +0200
committerDonald Sharp <sharpd@cumulusnetworks.com>2017-10-19 00:37:38 +0200
commit12f7047895612c5368c476806a5127500b43243e (patch)
treecf5618fd1369ad71bb3e01ef6c11ee5b97cfaf3a /bgpd/bgp_encap_tlv.c
parentMerge pull request #1333 from donaldsharp/command_py_leak (diff)
downloadfrr-12f7047895612c5368c476806a5127500b43243e.tar.xz
frr-12f7047895612c5368c476806a5127500b43243e.zip
bgpd: Fix off by one error introduced by 8c9cc7bbf657e3440d9bc758fe45aef5f43c989f
Commit 8c9cc7bbf657e3440d9bc758fe45aef5f43c989f changed the size of the `struct bgp_attr_encap_subtlv` type to be a zero length array at the end instead of having a 1 byte. All memory allocations for this subsuquently were off by 1 byte since those were not adjusted either. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'bgpd/bgp_encap_tlv.c')
-rw-r--r--bgpd/bgp_encap_tlv.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/bgpd/bgp_encap_tlv.c b/bgpd/bgp_encap_tlv.c
index 445750161..30a08098e 100644
--- a/bgpd/bgp_encap_tlv.c
+++ b/bgpd/bgp_encap_tlv.c
@@ -47,7 +47,7 @@ static struct bgp_attr_encap_subtlv *subtlv_encode_encap_l2tpv3_over_ip(
assert(total <= 0xff);
new = XCALLOC(MTYPE_ENCAP_TLV,
- sizeof(struct bgp_attr_encap_subtlv) - 1 + total);
+ sizeof(struct bgp_attr_encap_subtlv) + total);
assert(new);
new->type = BGP_ENCAP_SUBTLV_TYPE_ENCAPSULATION;
new->length = total;
@@ -72,7 +72,7 @@ subtlv_encode_encap_gre(struct bgp_tea_subtlv_encap_gre_key *st)
assert(total <= 0xff);
new = XCALLOC(MTYPE_ENCAP_TLV,
- sizeof(struct bgp_attr_encap_subtlv) - 1 + total);
+ sizeof(struct bgp_attr_encap_subtlv) + total);
assert(new);
new->type = BGP_ENCAP_SUBTLV_TYPE_ENCAPSULATION;
new->length = total;
@@ -95,7 +95,7 @@ subtlv_encode_encap_pbb(struct bgp_tea_subtlv_encap_pbb *st)
assert(total <= 0xff);
new = XCALLOC(MTYPE_ENCAP_TLV,
- sizeof(struct bgp_attr_encap_subtlv) - 1 + total);
+ sizeof(struct bgp_attr_encap_subtlv) + total);
assert(new);
new->type = BGP_ENCAP_SUBTLV_TYPE_ENCAPSULATION;
new->length = total;
@@ -128,7 +128,7 @@ subtlv_encode_proto_type(struct bgp_tea_subtlv_proto_type *st)
assert(total <= 0xff);
new = XCALLOC(MTYPE_ENCAP_TLV,
- sizeof(struct bgp_attr_encap_subtlv) - 1 + total);
+ sizeof(struct bgp_attr_encap_subtlv) + total);
assert(new);
new->type = BGP_ENCAP_SUBTLV_TYPE_PROTO_TYPE;
new->length = total;
@@ -150,7 +150,7 @@ subtlv_encode_color(struct bgp_tea_subtlv_color *st)
assert(total <= 0xff);
new = XCALLOC(MTYPE_ENCAP_TLV,
- sizeof(struct bgp_attr_encap_subtlv) - 1 + total);
+ sizeof(struct bgp_attr_encap_subtlv) + total);
assert(new);
new->type = BGP_ENCAP_SUBTLV_TYPE_COLOR;
new->length = total;
@@ -182,7 +182,7 @@ subtlv_encode_ipsec_ta(struct bgp_tea_subtlv_ipsec_ta *st)
assert(total <= 0xff);
new = XCALLOC(MTYPE_ENCAP_TLV,
- sizeof(struct bgp_attr_encap_subtlv) - 1 + total);
+ sizeof(struct bgp_attr_encap_subtlv) + total);
assert(new);
new->type = BGP_ENCAP_SUBTLV_TYPE_IPSEC_TA;
new->length = total;
@@ -206,7 +206,7 @@ subtlv_encode_remote_endpoint(struct bgp_tea_subtlv_remote_endpoint *st)
assert(total <= 0xff);
new = XCALLOC(MTYPE_ENCAP_TLV,
- sizeof(struct bgp_attr_encap_subtlv) - 1 + total);
+ sizeof(struct bgp_attr_encap_subtlv) + total);
assert(new);
new->type = BGP_ENCAP_SUBTLV_TYPE_REMOTE_ENDPOINT;
new->length = total;
@@ -404,7 +404,7 @@ void bgp_encap_type_vxlan_to_tlv(
if (attr->encap_subtlvs)
XFREE(MTYPE_ENCAP_TLV, attr->encap_subtlvs);
tlv = XCALLOC(MTYPE_ENCAP_TLV,
- sizeof(struct bgp_attr_encap_subtlv) - 1 + 12);
+ sizeof(struct bgp_attr_encap_subtlv) + 12);
tlv->type = 1; /* encapsulation type */
tlv->length = 12;
if (bet->vnid) {