qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v2 13/14] qga: Fix qmp_guest_get_memory_blocks() error handli


From: Eric Blake
Subject: Re: [PATCH v2 13/14] qga: Fix qmp_guest_get_memory_blocks() error handling
Date: Wed, 22 Apr 2020 08:14:25 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0

On 4/22/20 8:07 AM, Markus Armbruster wrote:
The Error ** argument must be NULL, &error_abort, &error_fatal, or a
pointer to a variable containing NULL.  Passing an argument of the
latter kind twice without clearing it in between is wrong: if the
first call sets an error, it no longer points to NULL for the second
call.

qmp_guest_get_memory_blocks() passes &local_err to
transfer_memory_block() in a loop.  If this fails in more than one
iteration, it can trip error_setv()'s assertion.

Fix it to break the loop.

Cc: Michael Roth <address@hidden>
Signed-off-by: Markus Armbruster <address@hidden>
---
  qga/commands-posix.c | 3 +++
  1 file changed, 3 insertions(+)


Reviewed-by: Eric Blake <address@hidden>

diff --git a/qga/commands-posix.c b/qga/commands-posix.c
index a52af0315f..ae1348dc8f 100644
--- a/qga/commands-posix.c
+++ b/qga/commands-posix.c
@@ -2518,6 +2518,9 @@ GuestMemoryBlockList *qmp_guest_get_memory_blocks(Error 
**errp)
          mem_blk->phys_index = strtoul(&de->d_name[6], NULL, 10);
          mem_blk->has_can_offline = true; /* lolspeak ftw */
          transfer_memory_block(mem_blk, true, NULL, &local_err);
+        if (local_err) {
+            break;
+        }
entry = g_malloc0(sizeof *entry);
          entry->value = mem_blk;


--
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org




reply via email to

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