mirror of
https://github.com/openvswitch/ovs
synced 2025-08-22 09:58:01 +00:00
ovsdb: Fix potential leak when making diff of conditions.
OVN unit tests highlight this: ERROR: LeakSanitizer: detected memory leaks Direct leak of 1344 byte(s) in 1 object(s) allocated from: 0 0x4db0b7 in calloc (ovsdb/ovsdb-server+0x4db0b7) 1 0x5c2162 in xcalloc__ lib/util.c:124:31 2 0x5c221c in xcalloc lib/util.c:161:12 3 0x54afbc in ovsdb_condition_diff ovsdb/condition.c:527:21 4 0x529da6 in ovsdb_monitor_table_condition_update ovsdb/monitor.c:824:5 5 0x524fa4 in ovsdb_jsonrpc_parse_monitor_cond_change_request ovsdb/jsonrpc-server.c:1557:13 6 0x5235c3 in ovsdb_jsonrpc_monitor_cond_change ovsdb/jsonrpc-server.c:1624:25 7 0x5217f2 in ovsdb_jsonrpc_session_got_request ovsdb/jsonrpc-server.c:1034:17 8 0x520ee6 in ovsdb_jsonrpc_session_run ovsdb/jsonrpc-server.c:572:17 9 0x51ffbe in ovsdb_jsonrpc_session_run_all ovsdb/jsonrpc-server.c:602:21 10 0x51fbcf in ovsdb_jsonrpc_server_run ovsdb/jsonrpc-server.c:417:9 11 0x517550 in main_loop ovsdb/ovsdb-server.c:224:9 12 0x512e80 in main ovsdb/ovsdb-server.c:507:5 13 0x7f9ecf675b74 in __libc_start_main (/lib64/libc.so.6+0x27b74) Fixes: ef1da757f016 ("ovsdb: condition: Process condition changes incrementally.") Signed-off-by: Xavier Simonart <xsimonar@redhat.com> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
This commit is contained in:
parent
a40c55eff9
commit
4fc02650ae
@ -550,10 +550,15 @@ ovsdb_condition_diff(struct ovsdb_condition *diff,
|
|||||||
&b->clauses[j]);
|
&b->clauses[j]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (diff->n_clauses) {
|
||||||
diff->optimized = a->optimized && b->optimized;
|
diff->optimized = a->optimized && b->optimized;
|
||||||
if (diff->optimized) {
|
if (diff->optimized) {
|
||||||
ovsdb_condition_optimize(diff);
|
ovsdb_condition_optimize(diff);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
free(diff->clauses);
|
||||||
|
diff->clauses = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -824,6 +824,7 @@ ovsdb_monitor_table_condition_update(
|
|||||||
ovsdb_condition_destroy(&mtc->new_condition);
|
ovsdb_condition_destroy(&mtc->new_condition);
|
||||||
ovsdb_condition_clone(&mtc->new_condition, &cond);
|
ovsdb_condition_clone(&mtc->new_condition, &cond);
|
||||||
ovsdb_condition_destroy(&cond);
|
ovsdb_condition_destroy(&cond);
|
||||||
|
ovsdb_condition_destroy(&mtc->diff_condition);
|
||||||
ovsdb_condition_diff(&mtc->diff_condition,
|
ovsdb_condition_diff(&mtc->diff_condition,
|
||||||
&mtc->old_condition, &mtc->new_condition);
|
&mtc->old_condition, &mtc->new_condition);
|
||||||
ovsdb_monitor_condition_add_columns(dbmon,
|
ovsdb_monitor_condition_add_columns(dbmon,
|
||||||
|
@ -586,6 +586,7 @@ row,action,name,number,_version
|
|||||||
[[]],
|
[[]],
|
||||||
[],
|
[],
|
||||||
[[[[["name","==","one"],["name","==","two"]]]],
|
[[[[["name","==","one"],["name","==","two"]]]],
|
||||||
|
[[[["name","==","two"],["name","==","one"]]]],
|
||||||
[[[["name","==","one"]]]],
|
[[[["name","==","one"]]]],
|
||||||
[[[false]]],
|
[[[false]]],
|
||||||
[[[true]]]])
|
[[[true]]]])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user