[ovs-dev] [PATCH ovn] ovn-nbctl: Fix double-free of parsed commands on error path.
Numan Siddique
numans at ovn.org
Thu Nov 26 10:32:44 UTC 2020
On Wed, Nov 25, 2020 at 10:02 PM Dumitru Ceara <dceara at redhat.com> wrote:
>
> Reported-by: Daniel Alvarez <dalvarez at redhat.com>
> Fixes: 8fb54e16378c ("ovn-nbctl: Cleanup allocated memory to keep valgrind happy.")
> Signed-off-by: Dumitru Ceara <dceara at redhat.com>
Thanks Dumitru and Daniel. I applied this patch to master and
backported to branches 20.09, 20.06 and 20.03.
Numan
> ---
> tests/ovn-nbctl.at | 12 ++++++++++++
> utilities/ovn-nbctl.c | 17 ++++++-----------
> 2 files changed, 18 insertions(+), 11 deletions(-)
>
> diff --git a/tests/ovn-nbctl.at b/tests/ovn-nbctl.at
> index 11091d8..01edfcb 100644
> --- a/tests/ovn-nbctl.at
> +++ b/tests/ovn-nbctl.at
> @@ -1976,6 +1976,18 @@ AT_CHECK([ovn-nbctl list forwarding_group], [0], [])
>
> ])
>
> +dnl ---------------------------------------------------------------------
> +
> +OVN_NBCTL_TEST([ovn_nbctl_negative], [basic negative tests], [
> +AT_CHECK([ovn-nbctl --id=@ls create logical_switch name=foo -- \
> + set logical_switch foo1 name=bar],
> + [1], [], [dnl
> +ovn-nbctl: no row "foo1" in table Logical_Switch
> +])
> +])
> +
> +dnl ---------------------------------------------------------------------
> +
> AT_SETUP([ovn-nbctl - daemon retry connection])
> OVN_NBCTL_TEST_START daemon
> AT_CHECK([kill `cat ovsdb-server.pid`])
> diff --git a/utilities/ovn-nbctl.c b/utilities/ovn-nbctl.c
> index a050f8d..d19e1b6 100644
> --- a/utilities/ovn-nbctl.c
> +++ b/utilities/ovn-nbctl.c
> @@ -6430,12 +6430,6 @@ out_error:
> the_idl_txn = NULL;
>
> ovsdb_symbol_table_destroy(symtab);
> - for (c = commands; c < &commands[n_commands]; c++) {
> - ds_destroy(&c->output);
> - table_destroy(c->table);
> - free(c->table);
> - }
> -
> return error;
> }
>
> @@ -6851,17 +6845,18 @@ server_cmd_run(struct unixctl_conn *conn, int argc, const char **argv_,
> } else {
> ds_put_cstr(&output, ds_cstr_ro(&c->output));
> }
> -
> - ds_destroy(&c->output);
> - table_destroy(c->table);
> - free(c->table);
> }
> unixctl_command_reply(conn, ds_cstr_ro(&output));
> ds_destroy(&output);
>
> out:
> free(error);
> - for (struct ctl_command *c = commands; c < &commands[n_commands]; c++) {
> +
> + struct ctl_command *c;
> + for (c = commands; c < &commands[n_commands]; c++) {
> + ds_destroy(&c->output);
> + table_destroy(c->table);
> + free(c->table);
> shash_destroy_free_data(&c->options);
> }
> free(commands);
> --
> 1.8.3.1
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
More information about the dev
mailing list