On Tue, Oct 02, 2018 at 11:37:03AM -0700, Yifeng Sun wrote: > This seems to be a copy and paste bug that iterates and frees > the wrong table. This commit fixes that. > > Reported-at: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10730 > Signed-off-by: Yifeng Sun <pkusunyif...@gmail.com> > --- > v1->v2: Fix email subject by adding [ovs-dev]
Thank you for the fix. It is valuable. Do you mind if we eliminate the code duplication, like this? Thanks, Ben. diff --git a/ovn/lib/extend-table.c b/ovn/lib/extend-table.c index 511d1a84b0c0..e42822be8ec1 100644 --- a/ovn/lib/extend-table.c +++ b/ovn/lib/extend-table.c @@ -33,26 +33,24 @@ ovn_extend_table_init(struct ovn_extend_table *table) hmap_init(&table->existing); } +static void +ovn_extend_table_info_destroy(struct hmap *target) +{ + struct ovn_extend_table_info *e, *next; + HMAP_FOR_EACH_SAFE (e, next, hmap_node, target) { + hmap_remove(target, &e->hmap_node); + free(e->name); + free(e); + } + hmap_destroy(target); +} + void ovn_extend_table_destroy(struct ovn_extend_table *table) { bitmap_free(table->table_ids); - - struct ovn_extend_table_info *desired, *d_next; - HMAP_FOR_EACH_SAFE (desired, d_next, hmap_node, &table->existing) { - hmap_remove(&table->existing, &desired->hmap_node); - free(desired->name); - free(desired); - } - hmap_destroy(&table->desired); - - struct ovn_extend_table_info *existing, *e_next; - HMAP_FOR_EACH_SAFE (existing, e_next, hmap_node, &table->existing) { - hmap_remove(&table->existing, &existing->hmap_node); - free(existing->name); - free(existing); - } - hmap_destroy(&table->existing); + ovn_extend_table_info_destroy(&table->desired); + ovn_extend_table_info_destroy(&table->existing); } /* Finds and returns a group_info in 'existing' whose key is identical _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev