exec: Fix file_ram_alloc() error API violations
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). Introduced in
commit 056b68af77
"fix qemu exit on memory hotplug when allocation
fails at prealloc time".
No caller actually passes null.
Fix anyway: splice in a local Error *err, and error_propagate().
Cc: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Message-Id: <20191204093625.14836-6-armbru@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
This commit is contained in:
parent
53cb2fc859
commit
56e477a563
6
exec.c
6
exec.c
@ -1843,6 +1843,7 @@ static void *file_ram_alloc(RAMBlock *block,
|
||||
bool truncate,
|
||||
Error **errp)
|
||||
{
|
||||
Error *err = NULL;
|
||||
MachineState *ms = MACHINE(qdev_get_machine());
|
||||
void *area;
|
||||
|
||||
@ -1900,8 +1901,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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user