qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Possible regression


From: Markus Armbruster
Subject: Re: [Qemu-devel] Possible regression
Date: Thu, 23 Mar 2017 17:06:32 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux)

"Richard W.M. Jones" <address@hidden> writes:

> On Wed, Mar 22, 2017 at 09:45:24AM -0500, Eric Blake wrote:
>> 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:
>> 
>> $ ./x86_64-softmmu/qemu-system-x86_64 -nodefaults -nographic -qmp stdio 
>> -object memory-backend-ram,id=mem1,size=4k,bogus=huh
>> qemu-system-x86_64: -object memory-backend-ram,id=mem1,size=4k,bogus=huh: 
>> Property '.bogus' not found
>> 
>> So the only real concern is that when we re-enable strict checking
>> in the QemuOpts visitor, we do not want to start flagging the two
>> leftover keys as unvisited.  Rearrange the code to clean out the
>> QemuOpts listing in advance, rather than removing items from the
>> QDict.  Since "qom-type" is usually an automatic implicit default,
>> we don't have to restore it (this does mean that once instantiated,
>> QemuOpts is not necessarily an accurate representation of the
>> original command line - but this is not the first place to do that);
>> however "id" has to be put back (requiring us to cast away a const).
>> 
>> [As a side note, hmp_object_add() turns a QDict into a QemuOpts,
>> then calls user_creatable_add_opts() which converts QemuOpts into
>> a new QDict. There are probably a lot of wasteful conversions like
>> this, but cleaning them up is a much bigger task than the immediate
>> regression fix.]
>> 
>> CC: address@hidden
>> Signed-off-by: Eric Blake <address@hidden>
>
> This commit causes a problem for libguestfs:
>
>   [02192ms] /home/rjones/d/qemu/x86_64-softmmu/qemu-system-x86_64 \
>   [...]
>       -object rng-random,filename=/dev/urandom,id=rng0 \
>       -device virtio-rng-pci,rng=rng0 \
>   [...]
>   qemu-system-x86_64: -object rng-random,filename=/dev/urandom,id=rng0: 
> Parameter 'qom-type' is missing
>
> (The full log is attached).  I don't know if we should be including
> the qom-type parameter here, and if we should what it should be set to.
>
> Rich.

Does the appended patch fix it for you?


diff --git a/qom/object_interfaces.c b/qom/object_interfaces.c
index 9c271ad..4d03665 100644
--- a/qom/object_interfaces.c
+++ b/qom/object_interfaces.c
@@ -134,6 +134,7 @@ Object *user_creatable_add_opts(QemuOpts *opts, Error 
**errp)
     visit_free(v);
 
     qemu_opts_set_id(opts, (char *) id);
+    qemu_opt_set(opts, "qom-type", type, &error_abort);
     g_free(type);
     QDECREF(pdict);
     return obj;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]