diff options
| author | Olivier Dugeon <olivier.dugeon@orange.com> | 2020-10-28 09:11:53 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-28 09:11:53 +0100 |
| commit | 1af7c1af0621b770218c8ec84fb36d8c480a1091 (patch) | |
| tree | b0f5f96151d33c48e7960034698a4649b3c49b50 | |
| parent | b02af9a99f82f33ee4a575fc8f2312b2ee2199b6 (diff) | |
| parent | 033c6d28169a0f6b92300995954fe444b2910abc (diff) | |
Merge pull request #7394 from donaldsharp/isis_uninited
isisd: Fix usage of uninited memory
| -rw-r--r-- | isisd/isis_tlvs.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/isisd/isis_tlvs.c b/isisd/isis_tlvs.c index 3cb2ce02ca..af419961d5 100644 --- a/isisd/isis_tlvs.c +++ b/isisd/isis_tlvs.c @@ -4414,11 +4414,19 @@ static void tlvs_area_addresses_to_adj(struct isis_tlvs *tlvs, bool *changed) { if (adj->area_address_count != tlvs->area_addresses.count) { + uint32_t oc = adj->area_address_count; + *changed = true; adj->area_address_count = tlvs->area_addresses.count; adj->area_addresses = XREALLOC( MTYPE_ISIS_ADJACENCY_INFO, adj->area_addresses, adj->area_address_count * sizeof(*adj->area_addresses)); + + for (; oc < adj->area_address_count; oc++) { + adj->area_addresses[oc].addr_len = 0; + memset(&adj->area_addresses[oc].area_addr, 0, + sizeof(adj->area_addresses[oc].area_addr)); + } } struct isis_area_address *addr = NULL; @@ -4496,11 +4504,18 @@ static void tlvs_ipv4_addresses_to_adj(struct isis_tlvs *tlvs, hook_call(isis_adj_ip_disabled_hook, adj, AF_INET); if (adj->ipv4_address_count != tlvs->ipv4_address.count) { + uint32_t oc = adj->ipv4_address_count; + *changed = true; adj->ipv4_address_count = tlvs->ipv4_address.count; adj->ipv4_addresses = XREALLOC( MTYPE_ISIS_ADJACENCY_INFO, adj->ipv4_addresses, adj->ipv4_address_count * sizeof(*adj->ipv4_addresses)); + + for (; oc < adj->ipv4_address_count; oc++) { + memset(&adj->ipv4_addresses[oc], 0, + sizeof(adj->ipv4_addresses[oc])); + } } struct isis_ipv4_address *addr = NULL; @@ -4535,11 +4550,18 @@ static void tlvs_ipv6_addresses_to_adj(struct isis_tlvs *tlvs, hook_call(isis_adj_ip_disabled_hook, adj, AF_INET6); if (adj->ipv6_address_count != tlvs->ipv6_address.count) { + uint32_t oc = adj->ipv6_address_count; + *changed = true; adj->ipv6_address_count = tlvs->ipv6_address.count; adj->ipv6_addresses = XREALLOC( MTYPE_ISIS_ADJACENCY_INFO, adj->ipv6_addresses, adj->ipv6_address_count * sizeof(*adj->ipv6_addresses)); + + for (; oc < adj->ipv6_address_count; oc++) { + memset(&adj->ipv6_addresses[oc], 0, + sizeof(adj->ipv6_addresses[oc])); + } } struct isis_ipv6_address *addr = NULL; |
