qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH] exec: don't exit if failed to preallocate memory fo


From: Hu Tao
Subject: [Qemu-devel] [PATCH] exec: don't exit if failed to preallocate memory for memory-backend-file
Date: Fri, 26 Sep 2014 15:32:09 +0800

When using monitor command object_add to add a memory backend file
but failed to preallocate memory for it, qemu exits silently. So a
unexpected user input, e.g. a too large size of memory-backend-file
can crash the guest.

This is the case of -mem-prealloc, not memory-backend-file,prealloc=y.

The problem can be reproduced as follows:

1. run qemu with -mem-prealloc:

  ./x86_64-softmmu/qemu-system-x86_64 -hda f18.img \
      -m 512 -mem-prealloc -qmp unix:/tmp/m,server,nowait \
      -monitor stdio -enable-kvm

2. add a memory-backend-file object from qemu monitor whose size is
   larger than host memory(assume host has 4G memory total):

   (qemu)object_add memory-backend-file,size=4G,mem-path=/hugepages,id=mem-file0

Without this patch, qemu quits with message:

  unable to map backing store for hugepages: Cannot allocate memory

With this patch, qemu gives the same message, but continues running.

Signed-off-by: Hu Tao <address@hidden>
---
 exec.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/exec.c b/exec.c
index 759055d..eed5da2 100644
--- a/exec.c
+++ b/exec.c
@@ -1163,9 +1163,9 @@ static void *file_ram_alloc(RAMBlock *block,
     return area;
 
 error:
-    if (mem_prealloc) {
+    if (area && area != MAP_FAILED) {
         error_report("%s\n", error_get_pretty(*errp));
-        exit(1);
+        munmap(area, memory);
     }
     return NULL;
 }
-- 
1.9.3




reply via email to

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