summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAvi Kivity <avi@redhat.com>2009-07-12 17:57:20 +0300
committerAvi Kivity <avi@redhat.com>2009-07-12 17:57:20 +0300
commitea4e29cd3f85cc4e136954b340486cb03b2fca9c (patch)
tree8148ffef59efc6482e4bc969e41ab8a0d8b065af /osdep.c
parentRemove leftover kvm_callbacks structure definition (diff)
parentMIPS signal handling fix (diff)
downloadqemu-kvm-ea4e29cd3f85cc4e136954b340486cb03b2fca9c.tar.gz
qemu-kvm-ea4e29cd3f85cc4e136954b340486cb03b2fca9c.tar.bz2
qemu-kvm-ea4e29cd3f85cc4e136954b340486cb03b2fca9c.zip
Merge commit '94c5495dd16ca3311cbc95705e58d28a45899d1d' into upstream-merge
* commit '94c5495dd16ca3311cbc95705e58d28a45899d1d': MIPS signal handling fix Enable MIPS NPTL MIPS atomic instructions MIPS usermode TLS register Fix MIPS sys_clone qdev: convert ac97. qdev: convert es1370. qdev/pci: misc fixes. qdev: remove DeviceType qdev: replace bus_type enum with bus_info struct. qdev: update pci device registration. Remove SDL/ prefix Add out of memory and zero size argument checks to be consistent with Fix the PCI header type of APB Update OpenBIOS images to r505 Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'osdep.c')
-rw-r--r--osdep.c30
1 files changed, 25 insertions, 5 deletions
diff --git a/osdep.c b/osdep.c
index 31098055c..f37c22ca2 100644
--- a/osdep.c
+++ b/osdep.c
@@ -51,10 +51,23 @@
#include "sysemu.h"
#include "qemu_socket.h"
+#if !defined(_POSIX_C_SOURCE) || defined(_WIN32)
+static void *oom_check(void *ptr)
+{
+ if (ptr == NULL) {
+ abort();
+ }
+ return ptr;
+}
+#endif
+
#if defined(_WIN32)
void *qemu_memalign(size_t alignment, size_t size)
{
- return VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
+ if (!size) {
+ abort();
+ }
+ return oom_check(VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE));
}
void *qemu_vmalloc(size_t size)
@@ -62,7 +75,10 @@ void *qemu_vmalloc(size_t size)
/* FIXME: this is not exactly optimal solution since VirtualAlloc
has 64Kb granularity, but at least it guarantees us that the
memory is page aligned. */
- return VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
+ if (!size) {
+ abort();
+ }
+ return oom_check(VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE));
}
void qemu_vfree(void *ptr)
@@ -106,6 +122,10 @@ static void *kqemu_vmalloc(size_t size)
struct statfs stfs;
#endif
+ if (!size) {
+ abort ();
+ }
+
if (phys_ram_fd < 0) {
tmpdir = getenv("QEMU_TMPDIR");
if (!tmpdir)
@@ -188,12 +208,12 @@ void *qemu_memalign(size_t alignment, size_t size)
void *ptr;
ret = posix_memalign(&ptr, alignment, size);
if (ret != 0)
- return NULL;
+ abort();
return ptr;
#elif defined(HOST_BSD)
- return valloc(size);
+ return oom_check(valloc(size));
#else
- return memalign(alignment, size);
+ return oom_check(memalign(alignment, size));
#endif
}