diff mbox

Bugfix: Handle error if VM Generation ID device not present

Message ID 20170302213650.86211-1-ben@skyportsystems.com (mailing list archive)
State New, archived
Headers show

Commit Message

ben@skyportsystems.com March 2, 2017, 9:36 p.m. UTC
From: Ben Warren <ben@skyportsystems.com>

This was crashing due to NULL-pointer dereference

QMP Test case:

Comments

Eric Blake March 2, 2017, 9:41 p.m. UTC | #1
On 03/02/2017 03:36 PM, ben@skyportsystems.com wrote:
> From: Ben Warren <ben@skyportsystems.com>
> 
> This was crashing due to NULL-pointer dereference
> 
> QMP Test case:
> ==============
> 
> (QEMU) query-vm-generation-id
> {"error": {"class": "GenericError", "desc": "VM Generation ID device not
> found"}}
> 
> HMP Test case:
> ==============
> virsh # qemu-monitor-command --hmp 3 info vm-generation-id
> VM Generation ID device not found
> 
> Signed-off-by: Ben Warren <ben@skyportsystems.com>
> ---
>  hmp.c             | 4 +++-
>  hw/acpi/vmgenid.c | 1 +
>  2 files changed, 4 insertions(+), 1 deletion(-)

Reviewed-by: Eric Blake <eblake@redhat.com>

However, hw/acpi/vmgenid.c is not part of the tree yet, so it may be
better to just respin the pull request to incorporate this into the
problematic patch that introduced the problem, rather than needing a
followup patch.
Michael S. Tsirkin March 2, 2017, 9:45 p.m. UTC | #2
On Thu, Mar 02, 2017 at 03:41:33PM -0600, Eric Blake wrote:
> On 03/02/2017 03:36 PM, ben@skyportsystems.com wrote:
> > From: Ben Warren <ben@skyportsystems.com>
> > 
> > This was crashing due to NULL-pointer dereference
> > 
> > QMP Test case:
> > ==============
> > 
> > (QEMU) query-vm-generation-id
> > {"error": {"class": "GenericError", "desc": "VM Generation ID device not
> > found"}}
> > 
> > HMP Test case:
> > ==============
> > virsh # qemu-monitor-command --hmp 3 info vm-generation-id
> > VM Generation ID device not found
> > 
> > Signed-off-by: Ben Warren <ben@skyportsystems.com>
> > ---
> >  hmp.c             | 4 +++-
> >  hw/acpi/vmgenid.c | 1 +
> >  2 files changed, 4 insertions(+), 1 deletion(-)
> 
> Reviewed-by: Eric Blake <eblake@redhat.com>
> 
> However, hw/acpi/vmgenid.c is not part of the tree yet, so it may be
> better to just respin the pull request to incorporate this into the
> problematic patch that introduced the problem, rather than needing a
> followup patch.
> 
> -- 
> Eric Blake   eblake redhat com    +1-919-301-3266
> Libvirt virtualization library http://libvirt.org
> 

The issue seems minor enough.
I don't plan to re-spin unless there are more issues.
Laszlo Ersek March 2, 2017, 10:41 p.m. UTC | #3
On 03/02/17 22:36, ben@skyportsystems.com wrote:
> From: Ben Warren <ben@skyportsystems.com>
> 
> This was crashing due to NULL-pointer dereference
> 
> QMP Test case:
> ==============
> 
> (QEMU) query-vm-generation-id
> {"error": {"class": "GenericError", "desc": "VM Generation ID device not
> found"}}
> 
> HMP Test case:
> ==============
> virsh # qemu-monitor-command --hmp 3 info vm-generation-id
> VM Generation ID device not found
> 
> Signed-off-by: Ben Warren <ben@skyportsystems.com>
> ---
>  hmp.c             | 4 +++-
>  hw/acpi/vmgenid.c | 1 +
>  2 files changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/hmp.c b/hmp.c
> index 261843f..edb8970 100644
> --- a/hmp.c
> +++ b/hmp.c
> @@ -2608,9 +2608,11 @@ void hmp_hotpluggable_cpus(Monitor *mon, const QDict *qdict)
>  
>  void hmp_info_vm_generation_id(Monitor *mon, const QDict *qdict)
>  {
> -    GuidInfo *info = qmp_query_vm_generation_id(NULL);
> +    Error *err = NULL;
> +    GuidInfo *info = qmp_query_vm_generation_id(&err);
>      if (info) {
>          monitor_printf(mon, "%s\n", info->guid);
>      }
> +    hmp_handle_error(mon, &err);
>      qapi_free_GuidInfo(info);
>  }
> diff --git a/hw/acpi/vmgenid.c b/hw/acpi/vmgenid.c
> index 744f284..7a3ad17 100644
> --- a/hw/acpi/vmgenid.c
> +++ b/hw/acpi/vmgenid.c
> @@ -248,6 +248,7 @@ GuidInfo *qmp_query_vm_generation_id(Error **errp)
>      Object *obj = find_vmgenid_dev();
>  
>      if (!obj) {
> +        error_setg(errp, "VM Generation ID device not found");
>          return NULL;
>      }
>      vms = VMGENID(obj);
> 

Reviewed-by: Laszlo Ersek <lersek@redhat.com>
diff mbox

Patch

==============

(QEMU) query-vm-generation-id
{"error": {"class": "GenericError", "desc": "VM Generation ID device not
found"}}

HMP Test case:
==============
virsh # qemu-monitor-command --hmp 3 info vm-generation-id
VM Generation ID device not found

Signed-off-by: Ben Warren <ben@skyportsystems.com>
---
 hmp.c             | 4 +++-
 hw/acpi/vmgenid.c | 1 +
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/hmp.c b/hmp.c
index 261843f..edb8970 100644
--- a/hmp.c
+++ b/hmp.c
@@ -2608,9 +2608,11 @@  void hmp_hotpluggable_cpus(Monitor *mon, const QDict *qdict)
 
 void hmp_info_vm_generation_id(Monitor *mon, const QDict *qdict)
 {
-    GuidInfo *info = qmp_query_vm_generation_id(NULL);
+    Error *err = NULL;
+    GuidInfo *info = qmp_query_vm_generation_id(&err);
     if (info) {
         monitor_printf(mon, "%s\n", info->guid);
     }
+    hmp_handle_error(mon, &err);
     qapi_free_GuidInfo(info);
 }
diff --git a/hw/acpi/vmgenid.c b/hw/acpi/vmgenid.c
index 744f284..7a3ad17 100644
--- a/hw/acpi/vmgenid.c
+++ b/hw/acpi/vmgenid.c
@@ -248,6 +248,7 @@  GuidInfo *qmp_query_vm_generation_id(Error **errp)
     Object *obj = find_vmgenid_dev();
 
     if (!obj) {
+        error_setg(errp, "VM Generation ID device not found");
         return NULL;
     }
     vms = VMGENID(obj);