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