Message ID | 20191130194240.10517-9-armbru@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Error handling fixes, may contain 4.2 material | expand |
On Sat, 30 Nov 2019 20:42:27 +0100 Markus Armbruster <armbru@redhat.com> wrote: > When os_mem_prealloc() fails, file_ram_alloc() calls qemu_ram_munmap() > and returns null. Except it doesn't when its @errp argument is null, > because it checks for failure with (errp && *errp). Messed up in > commit 056b68af77 "fix qemu exit on memory hotplug when allocation > fails at prealloc time". > > The bug can't bite as no caller actually passes null. Fix it anyway. > > Cc: Igor Mammedov <imammedo@redhat.com> > Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> > --- > exec.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/exec.c b/exec.c > index ffdb518535..45695a5f2d 100644 > --- a/exec.c > +++ b/exec.c > @@ -1841,6 +1841,7 @@ static void *file_ram_alloc(RAMBlock *block, > bool truncate, > Error **errp) > { > + Error *err = NULL; > MachineState *ms = MACHINE(qdev_get_machine()); > void *area; > > @@ -1898,8 +1899,9 @@ static void *file_ram_alloc(RAMBlock *block, > } > > if (mem_prealloc) { > - os_mem_prealloc(fd, area, memory, ms->smp.cpus, errp); > - if (errp && *errp) { > + os_mem_prealloc(fd, area, memory, ms->smp.cpus, &err); > + if (err) { > + error_propagate(errp, err); > qemu_ram_munmap(fd, area, memory); > return NULL; > }
diff --git a/exec.c b/exec.c index ffdb518535..45695a5f2d 100644 --- a/exec.c +++ b/exec.c @@ -1841,6 +1841,7 @@ static void *file_ram_alloc(RAMBlock *block, bool truncate, Error **errp) { + Error *err = NULL; MachineState *ms = MACHINE(qdev_get_machine()); void *area; @@ -1898,8 +1899,9 @@ static void *file_ram_alloc(RAMBlock *block, } if (mem_prealloc) { - os_mem_prealloc(fd, area, memory, ms->smp.cpus, errp); - if (errp && *errp) { + os_mem_prealloc(fd, area, memory, ms->smp.cpus, &err); + if (err) { + error_propagate(errp, err); qemu_ram_munmap(fd, area, memory); return NULL; }
When os_mem_prealloc() fails, file_ram_alloc() calls qemu_ram_munmap() and returns null. Except it doesn't when its @errp argument is null, because it checks for failure with (errp && *errp). Messed up in commit 056b68af77 "fix qemu exit on memory hotplug when allocation fails at prealloc time". The bug can't bite as no caller actually passes null. Fix it anyway. Cc: Igor Mammedov <imammedo@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com> --- exec.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)