On Tue, Jun 23, 2020 at 05:54:52PM +0200, Eric Auger wrote: > object_property_add() does not allow object_property_try_add() > to gracefully fail as &error_abort is passed as an error handle. > > However such failure can easily be triggered from the QMP shell when, > for instance, one attempts to create an object with an id that already > exists: > > For instance, call twice: > object-add qom-type=memory-backend-ram id=mem1 props.size=1073741824 > and QEMU aborts. > > This behavior is undesired as a user/management application mistake > in reusing a property ID shouldn't result in loss of the VM and live > data within. > > This patch introduces two new functions, object_property_add_err() and > object_property_add_child_err() whose prototype features an error handle. > object_property_add_child_err() now gets called from user_creatable_add_type. > This solution was chosen instead of changing the prototype of existing > functions because the number of existing callers is huge. > > The error now is returned gracefully to the QMP client. > > (QEMU) object-add qom-type=memory-backend-ram id=mem2 props.size=4294967296 > {"return": {}} > (QEMU) object-add qom-type=memory-backend-ram id=mem2 props.size=4294967296 > {"error": {"class": "GenericError", "desc": "attempt to add duplicate property > 'mem2' to object (type 'container')"}} > > Signed-off-by: Eric Auger <eric.au...@redhat.com> > --- > include/qom/object.h | 24 ++++++++++++++++++++++-- > qom/object.c | 33 ++++++++++++++++++++++++++++----- > qom/object_interfaces.c | 7 +++++-- > 3 files changed, 55 insertions(+), 9 deletions(-)
Reviewed-by: Daniel P. Berrangé <berra...@redhat.com> Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|