mirror of https://github.com/xemu-project/xemu.git
util/mmap-alloc: check parameter before using
Signed-off-by: Cao jin <caoj.fnst@cn.fujitsu.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
This commit is contained in:
parent
8907379204
commit
4a3ecf201a
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
#include "qemu/mmap-alloc.h"
|
#include "qemu/mmap-alloc.h"
|
||||||
|
#include "qemu/host-utils.h"
|
||||||
|
|
||||||
#define HUGETLBFS_MAGIC 0x958458f6
|
#define HUGETLBFS_MAGIC 0x958458f6
|
||||||
|
|
||||||
|
@ -61,18 +62,18 @@ void *qemu_ram_mmap(int fd, size_t size, size_t align, bool shared)
|
||||||
#else
|
#else
|
||||||
void *ptr = mmap(0, total, PROT_NONE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
|
void *ptr = mmap(0, total, PROT_NONE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
|
||||||
#endif
|
#endif
|
||||||
size_t offset = QEMU_ALIGN_UP((uintptr_t)ptr, align) - (uintptr_t)ptr;
|
size_t offset;
|
||||||
void *ptr1;
|
void *ptr1;
|
||||||
|
|
||||||
if (ptr == MAP_FAILED) {
|
if (ptr == MAP_FAILED) {
|
||||||
return MAP_FAILED;
|
return MAP_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make sure align is a power of 2 */
|
assert(is_power_of_2(align));
|
||||||
assert(!(align & (align - 1)));
|
|
||||||
/* Always align to host page size */
|
/* Always align to host page size */
|
||||||
assert(align >= getpagesize());
|
assert(align >= getpagesize());
|
||||||
|
|
||||||
|
offset = QEMU_ALIGN_UP((uintptr_t)ptr, align) - (uintptr_t)ptr;
|
||||||
ptr1 = mmap(ptr + offset, size, PROT_READ | PROT_WRITE,
|
ptr1 = mmap(ptr + offset, size, PROT_READ | PROT_WRITE,
|
||||||
MAP_FIXED |
|
MAP_FIXED |
|
||||||
(fd == -1 ? MAP_ANONYMOUS : 0) |
|
(fd == -1 ? MAP_ANONYMOUS : 0) |
|
||||||
|
|
Loading…
Reference in New Issue