Skip to content
  • Eric Auger's avatar
    db57fef1
    qom: Introduce object_property_try_add_child() · db57fef1
    Eric Auger authored
    
    
    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. This is achieved from the following call path:
    
    qmp_object_add -> user_creatable_add_dict -> user_creatable_add_type ->
    object_property_add_child -> object_property_add
    
    For instance, from the qmp-shell, 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 a new function, object_property_try_add_child()
    which takes an error handle and turn object_property_try_add() into
    a non-static one.
    
    Now the call path becomes:
    
    user_creatable_add_type -> object_property_try_add_child ->
    object_property_try_add
    
    and the error 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: default avatarEric Auger <eric.auger@redhat.com>
    Fixes: d2623129 ("qom: Drop parameter @errp of object_property_add() & friends")
    Reviewed-by: default avatarMarkus Armbruster <armbru@redhat.com>
    
    Reviewed-by: default avatarGreg Kurz <groug@kaod.org>
    Tested-by: default avatarGreg Kurz <groug@kaod.org>
    Message-Id: <20200629193424.30280-2-eric.auger@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    db57fef1
    qom: Introduce object_property_try_add_child()
    Eric Auger authored
    
    
    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. This is achieved from the following call path:
    
    qmp_object_add -> user_creatable_add_dict -> user_creatable_add_type ->
    object_property_add_child -> object_property_add
    
    For instance, from the qmp-shell, 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 a new function, object_property_try_add_child()
    which takes an error handle and turn object_property_try_add() into
    a non-static one.
    
    Now the call path becomes:
    
    user_creatable_add_type -> object_property_try_add_child ->
    object_property_try_add
    
    and the error 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: default avatarEric Auger <eric.auger@redhat.com>
    Fixes: d2623129 ("qom: Drop parameter @errp of object_property_add() & friends")
    Reviewed-by: default avatarMarkus Armbruster <armbru@redhat.com>
    
    Reviewed-by: default avatarGreg Kurz <groug@kaod.org>
    Tested-by: default avatarGreg Kurz <groug@kaod.org>
    Message-Id: <20200629193424.30280-2-eric.auger@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Loading