
On Fri, Sep 24, 2021 at 11:04:25AM +0200, Kevin Wolf wrote:
Directly call qdev_device_add_from_qdict() for QMP device_add instead of first going through QemuOpts and converting back to QDict.
Note that this changes the behaviour of device_add, though in ways that should be considered bug fixes:
QemuOpts ignores differences between data types, so you could successfully pass a string "123" for an integer property, or a string "on" for a boolean property (and vice versa). After this change, the correct data type for the property must be used in the JSON input.
qemu_opts_from_qdict() also silently ignores any options whose value is a QDict, QList or QNull.
To illustrate, the following QMP command was accepted before and is now rejected for both reasons:
{ "execute": "device_add", "arguments": { "driver": "scsi-cd", "drive": { "completely": "invalid" }, "physical_block_size": "4096" } }
Signed-off-by: Kevin Wolf <kwolf@redhat.com> --- softmmu/qdev-monitor.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-)
Reviewed-by: Eric Blake <eblake@redhat.com> -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org