[ovs-dev] [PATCH ovn] pinctrl: Fix various leaks of lport addresses.

Mark Michelson mmichels at redhat.com
Wed May 13 20:44:32 UTC 2020


Acked-by: Mark Michelson <mmichels at redhat.com>

On 5/13/20 12:50 PM, Ilya Maximets wrote:
> Example of one of the valgrind reports:
> 
>   4,012 bytes in 59 blocks are definitely lost in loss record 1,579 of 1,631
>      at 0x4839748: malloc (vg_replace_malloc.c:308)
>      by 0x483BD63: realloc (vg_replace_malloc.c:836)
>      by 0x4C8F74: xrealloc (util.c:149)
>      by 0x4397E4: add_ipv4_netaddr.isra.0 (ovn-util.c:34)
>      by 0x439A65: parse_and_store_addresses (ovn-util.c:141)
>      by 0x439CB8: extract_addresses (ovn-util.c:174)
>      by 0x439CB8: extract_lsp_addresses (ovn-util.c:189)
>      by 0x41A134: fill_ipv6_prefix_state (pinctrl.c:1092)
>      by 0x41A134: prepare_ipv6_prefixd (pinctrl.c:1209)
>      by 0x41FC57: pinctrl_run (pinctrl.c:2930)
>      by 0x4096BB: main (ovn-controller.c:2101)
> 
> CC: Numan Siddique <numans at ovn.org>
> CC: Lorenzo Bianconi <lorenzo.bianconi at redhat.com>
> Fixes: 8be01f4a5329 ("Send service monitor health checks")
> Fixes: e3a398e9146e ("controller: Add ipv6 prefix delegation state machine")
> Signed-off-by: Ilya Maximets <i.maximets at ovn.org>
> ---
>   controller/pinctrl.c | 13 ++++++++-----
>   1 file changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/controller/pinctrl.c b/controller/pinctrl.c
> index d976ec82b..103198282 100644
> --- a/controller/pinctrl.c
> +++ b/controller/pinctrl.c
> @@ -1130,6 +1130,7 @@ fill_ipv6_prefix_state(struct ovsdb_idl_txn *ovnsb_idl_txn,
>               smap_destroy(&options);
>           }
>           pfd->last_used = time_msec();
> +        destroy_lport_addresses(&c_addrs);
>       }
>   
>       return changed;
> @@ -1194,8 +1195,10 @@ prepare_ipv6_prefixd(struct ovsdb_idl_txn *ovnsb_idl_txn,
>                   ea = laddrs.ea;
>                   if (laddrs.n_ipv6_addrs > 0) {
>                       ip6_addr = laddrs.ipv6_addrs[0].addr;
> +                    destroy_lport_addresses(&laddrs);
>                       break;
>                   }
> +                destroy_lport_addresses(&laddrs);
>               }
>   
>               if (eth_addr_is_zero(ea)) {
> @@ -5839,8 +5842,9 @@ sync_svc_monitors(struct ovsdb_idl_txn *ovnsb_idl_txn,
>   
>           struct eth_addr ea;
>           bool mac_found = false;
> -        for (size_t i = 0; i < pb->n_mac; i++) {
> +        for (size_t i = 0; i < pb->n_mac && !mac_found; i++) {
>               struct lport_addresses laddrs;
> +
>               if (!extract_lsp_addresses(pb->mac[i], &laddrs)) {
>                   continue;
>               }
> @@ -5853,14 +5857,13 @@ sync_svc_monitors(struct ovsdb_idl_txn *ovnsb_idl_txn,
>                   }
>               }
>   
> -            if (mac_found) {
> -                break;
> -            } else if (!laddrs.n_ipv4_addrs) {
> +            if (!mac_found && !laddrs.n_ipv4_addrs) {
>                   /* IPv4 address(es) are not configured. Use the first mac. */
>                   ea = laddrs.ea;
>                   mac_found = true;
> -                break;
>               }
> +
> +            destroy_lport_addresses(&laddrs);
>           }
>   
>           if (!mac_found) {
> 



More information about the dev mailing list