]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
kvm tools: Fix attempt to free mmaped memory
authorSasha Levin <levinsasha928@gmail.com>
Fri, 17 Jun 2011 11:13:16 +0000 (07:13 -0400)
committerPekka Enberg <penberg@kernel.org>
Fri, 17 Jun 2011 13:43:40 +0000 (16:43 +0300)
Framebuffer memory which was mmap() is being free() at the shutdown
of the guest, leading to glibc errors.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
tools/kvm/framebuffer.c
tools/kvm/hw/vesa.c
tools/kvm/include/kvm/framebuffer.h

index 1e354962e0560a4e49be271d3068835e46da64d7..b6eb1acee962880fd0fb255d6d951cf5ca438406 100644 (file)
@@ -3,6 +3,7 @@
 #include <linux/kernel.h>
 #include <linux/list.h>
 #include <stdlib.h>
+#include <sys/mman.h>
 
 static LIST_HEAD(framebuffers);
 
@@ -62,6 +63,6 @@ void fb__stop(void)
        struct framebuffer *fb;
 
        list_for_each_entry(fb, &framebuffers, node) {
-               free(fb->mem);
+               munmap(fb->mem, fb->mem_size);
        }
 }
index 71322fc2da5bef999ee6ec8e6784747df1063e6f..032e63030c7f298707c7c1865fbcdc6b1f36764a 100644 (file)
@@ -70,6 +70,7 @@ struct framebuffer *vesa__init(struct kvm *kvm)
                .depth                  = VESA_BPP,
                .mem                    = mem,
                .mem_addr               = VESA_MEM_ADDR,
+               .mem_size               = VESA_MEM_SIZE,
        };
        return fb__register(&vesafb);
 }
index d28dadb9f055a10cce5d55a1aa79064f67eedad3..b66d0ba9982ed228d67ba910b7a3bc02733788af 100644 (file)
@@ -20,6 +20,7 @@ struct framebuffer {
        u8                              depth;
        char                            *mem;
        u64                             mem_addr;
+       u64                             mem_size;
 
        unsigned long                   nr_targets;
        struct fb_target_operations     *targets[FB_MAX_TARGETS];