[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-stable] [PULL for-2.9 16/17] qom: Avoid unvisited 'id'/'qom-ty
From: |
Eric Blake |
Subject: |
Re: [Qemu-stable] [PULL for-2.9 16/17] qom: Avoid unvisited 'id'/'qom-type' in user_creatable_add_opts |
Date: |
Wed, 22 Mar 2017 12:28:34 -0500 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 |
On 03/22/2017 11:05 AM, Markus Armbruster wrote:
> From: Eric Blake <address@hidden>
>
> A regression in commit 15c2f669e caused us to silently ignore
> excess input to the QemuOpts visitor. Later, commit ea4641
> accidentally abused that situation, by removing "qom-type" and
> "id" from the corresponding QDict but leaving them defined in
> the QemuOpts, when using the pair of containers to create a
> user-defined object. Note that since we are already traversing
> two separate items (a QDict and a QemuOpts), we are already
> able to flag bogus arguments, as in:
>
> +++ b/qom/object_interfaces.c
> @@ -114,7 +114,7 @@ Object *user_creatable_add_opts(QemuOpts *opts, Error
> **errp)
> QDict *pdict;
> Object *obj;
> const char *id = qemu_opts_id(opts);
> - const char *type = qemu_opt_get(opts, "qom-type");
> + char *type = qemu_opt_get_del(opts, "qom-type");
>
> if (!type) {
> error_setg(errp, QERR_MISSING_PARAMETER, "qom-type");
> @@ -125,14 +125,15 @@ Object *user_creatable_add_opts(QemuOpts *opts, Error
> **errp)
> return NULL;
> }
Shoot - I missed the memory leak of type if id is not present. I'll post
the fixup, but depending on timing, it may have to be a separate patch
rather than a v2 pull request.
>
> + qemu_opts_set_id(opts, NULL);
> pdict = qemu_opts_to_qdict(opts, NULL);
> - qdict_del(pdict, "qom-type");
> - qdict_del(pdict, "id");
>
> v = opts_visitor_new(opts);
> obj = user_creatable_add_type(type, id, pdict, v, errp);
> visit_free(v);
>
> + qemu_opts_set_id(opts, (char *) id);
> + g_free(type);
> QDECREF(pdict);
> return obj;
> }
>
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature