Re: [PATCH v2 05/18] exec: Fix file_ram_alloc() error API violations

2019-12-04 Thread Philippe Mathieu-Daudé

On 12/4/19 10:36 AM, Markus Armbruster 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).  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 
Signed-off-by: Markus Armbruster 
Reviewed-by: Igor Mammedov 


Reviewed-by: Philippe Mathieu-Daudé 


---
  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, );
+if (err) {
+error_propagate(errp, err);
  qemu_ram_munmap(fd, area, memory);
  return NULL;
  }






[PATCH v2 05/18] exec: Fix file_ram_alloc() error API violations

2019-12-04 Thread Markus Armbruster
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 
Signed-off-by: Markus Armbruster 
Reviewed-by: Igor Mammedov 
---
 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, );
+if (err) {
+error_propagate(errp, err);
 qemu_ram_munmap(fd, area, memory);
 return NULL;
 }
-- 
2.21.0