Fix it by using shash_destroy_free_data() instead of shash_destroy().

Example of asan log of this memory leak:

Direct leak of 232 byte(s) in 29 object(s) allocated from:
    #0 0x534b0f in malloc 
(/home/hanzhou/src/ovn/_build_as/controller/ovn-controller+0x534b0f)
    #1 0x73bd4d in xmalloc__ /home/hanzhou/src/ovs/_build/../lib/util.c:137:15
    #2 0x73bd4d in xmalloc /home/hanzhou/src/ovs/_build/../lib/util.c:172:12
    #3 0x638c49 in parse_constant_set 
/home/hanzhou/src/ovn/_build_as/../lib/expr.c:971:14
    #4 0x64450d in expr_parse_primary 
/home/hanzhou/src/ovn/_build_as/../lib/expr.c:1390:44
    #5 0x63aefc in expr_parse_not 
/home/hanzhou/src/ovn/_build_as/../lib/expr.c:1479:16
    #6 0x63ac45 in expr_parse__ 
/home/hanzhou/src/ovn/_build_as/../lib/expr.c:1486:22
    #7 0x63b500 in expr_parse 
/home/hanzhou/src/ovn/_build_as/../lib/expr.c:1535:34
    #8 0x63b500 in expr_parse_string 
/home/hanzhou/src/ovn/_build_as/../lib/expr.c:1557:25
    #9 0x598a56 in convert_match_to_expr 
/home/hanzhou/src/ovn/_build_as/../controller/lflow.c:1240:22
    #10 0x591c07 in consider_logical_flow__ 
/home/hanzhou/src/ovn/_build_as/../controller/lflow.c:1407:16
    #11 0x58d641 in add_logical_flows 
/home/hanzhou/src/ovn/_build_as/../controller/lflow.c:393:9
    #12 0x58d641 in lflow_run 
/home/hanzhou/src/ovn/_build_as/../controller/lflow.c:2444:5
    #13 0x5f57a3 in en_lflow_output_run 
/home/hanzhou/src/ovn/_build_as/../controller/ovn-controller.c:2449:5
    #14 0x65bc04 in engine_recompute 
/home/hanzhou/src/ovn/_build_as/../lib/inc-proc-eng.c:380:5
    #15 0x65b2a3 in engine_run_node 
/home/hanzhou/src/ovn/_build_as/../lib/inc-proc-eng.c:456:17
    #16 0x65b2a3 in engine_run 
/home/hanzhou/src/ovn/_build_as/../lib/inc-proc-eng.c:493:9
    #17 0x5ef9c1 in main 
/home/hanzhou/src/ovn/_build_as/../controller/ovn-controller.c
    #18 0x7f82418691a1 in __libc_start_main (/lib64/libc.so.6+0x281a1)

Reported-by: Numan Siddique <[email protected]>
Fixes: aa3e4e8a81 ("lflow: Track reference count of address sets when parsing 
lflows.")
Signed-off-by: Han Zhou <[email protected]>
---
 controller/lflow.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/controller/lflow.c b/controller/lflow.c
index cf090612f..e169edef1 100644
--- a/controller/lflow.c
+++ b/controller/lflow.c
@@ -1258,7 +1258,7 @@ convert_match_to_expr(const struct sbrec_logical_flow 
*lflow,
         *pg_addr_set_ref = (!sset_is_empty(&port_groups_ref) ||
                             !shash_is_empty(&addr_sets_ref));
     }
-    shash_destroy(&addr_sets_ref);
+    shash_destroy_free_data(&addr_sets_ref);
     sset_destroy(&port_groups_ref);
 
     if (!error) {
-- 
2.30.2

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to