[ovs-dev] [PATCH v2] extend-table: Fix a bug that iterates wrong table

Yifeng Sun pkusunyifeng at gmail.com
Tue Oct 2 22:16:25 UTC 2018


Good idea, let me work out a new version.

Thanks,
Yifeng

On Tue, Oct 2, 2018 at 3:03 PM Ben Pfaff <blp at ovn.org> wrote:

> 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 <pkusunyifeng at 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
>


More information about the dev mailing list