]> git.proxmox.com Git - mirror_qemu.git/commitdiff
exec: avoid possible overwriting of mmaped area in qemu_ram_remap
authorPaolo Bonzini <pbonzini@redhat.com>
Wed, 25 Mar 2015 13:14:56 +0000 (14:14 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 26 Mar 2015 09:43:54 +0000 (10:43 +0100)
It is not necessary to munmap an area before remapping it with MAP_FIXED;
if the memory region specified by addr and len overlaps pages of any
existing mapping, then the overlapped part of the existing mapping will
be discarded.

On the other hand, if QEMU does munmap the pages, there is a small
probability that another mmap sneaks in and catches the just-freed
portion of the address space.  In effect, munmap followed by
mmap(MAP_FIXED) is a use-after-free error, and Coverity flags it
as such.  Fix it.

Reviewed-by: Gonglei <arei.gonglei@huawei.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
exec.c

diff --git a/exec.c b/exec.c
index 8b922db6128209645bf31d68da0e02413e598455..6d1e1e4c754386d4cc7cdb723a2cd8201be5f2f3 100644 (file)
--- a/exec.c
+++ b/exec.c
@@ -1638,7 +1638,6 @@ void qemu_ram_remap(ram_addr_t addr, ram_addr_t length)
                 abort();
             } else {
                 flags = MAP_FIXED;
-                munmap(vaddr, length);
                 if (block->fd >= 0) {
                     flags |= (block->flags & RAM_SHARED ?
                               MAP_SHARED : MAP_PRIVATE);