Acked-by: Ethan Jackson <et...@nicira.com>

On Fri, Sep 21, 2012 at 11:26 AM, Ben Pfaff <b...@nicira.com> wrote:
> The ovsdb-server supports obtaining its remote connection targets from a
> database table and updating that table with connection status information.
> One of the supported connection status columns is a boolean column named
> "is_connected".  The code in ovsdb-server blindly assigned a bool into
> this column without checking that it actually had space allocated for one.
> This was and is fine with the ovs-vswitchd schema, which always has exactly
> one value in this column.  However, if a database schema makes this column
> optional, and there are actually no values in it, then this assignment
> dereferences a null pointer.
>
> This commit fixes the problem by allocating space for a bool if none has
> yet been allocated.
>
> Noticed while adding an extra test for the connection status feature.
>
> Signed-off-by: Ben Pfaff <b...@nicira.com>
> ---
>  ovsdb/ovsdb-server.c |   16 ++++++++++++++--
>  1 files changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c
> index 1bf10d9..32e2eb0 100644
> --- a/ovsdb/ovsdb-server.c
> +++ b/ovsdb/ovsdb-server.c
> @@ -404,12 +404,24 @@ read_string_column(const struct ovsdb_row *row, const 
> char *column_name,
>  static void
>  write_bool_column(struct ovsdb_row *row, const char *column_name, bool value)
>  {
> -    struct ovsdb_datum *datum = get_datum(row, column_name, 
> OVSDB_TYPE_BOOLEAN,
> -                                          OVSDB_TYPE_VOID, 1);
> +    const struct ovsdb_column *column;
> +    struct ovsdb_datum *datum;
>
> +    column = ovsdb_table_schema_get_column(row->table->schema, column_name);
> +    datum = get_datum(row, column_name, OVSDB_TYPE_BOOLEAN,
> +                      OVSDB_TYPE_VOID, 1);
>      if (!datum) {
>          return;
>      }
> +
> +    if (datum->n != 1) {
> +        ovsdb_datum_destroy(datum, &column->type);
> +
> +        datum->n = 1;
> +        datum->keys = xmalloc(sizeof *datum->keys);
> +        datum->values = NULL;
> +    }
> +
>      datum->keys[0].boolean = value;
>  }
>
> --
> 1.7.2.5
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to