]> xenbits.xensource.com Git - qemu-upstream-4.2-testing.git/commitdiff
kvm: remove guest triggerable abort()
authorGleb Natapov <gleb@redhat.com>
Wed, 28 Jul 2010 15:13:23 +0000 (18:13 +0300)
committerMarcelo Tosatti <mtosatti@redhat.com>
Thu, 5 Aug 2010 12:57:36 +0000 (09:57 -0300)
This abort() condition is easily triggerable by a guest if it configures
pci bar with unaligned address that overlaps main memory.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
kvm-all.c

index 736c5168622079a37ace62a19e70ba27925a7684..85f2e5868f87354e92a6fbef53fc27fbb8aae6c7 100644 (file)
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -432,18 +432,10 @@ static void kvm_set_phys_mem(target_phys_addr_t start_addr,
     KVMSlot *mem, old;
     int err;
 
-    if (start_addr & ~TARGET_PAGE_MASK) {
-        if (flags >= IO_MEM_UNASSIGNED) {
-            if (!kvm_lookup_overlapping_slot(s, start_addr,
-                                             start_addr + size)) {
-                return;
-            }
-            fprintf(stderr, "Unaligned split of a KVM memory slot\n");
-        } else {
-            fprintf(stderr, "Only page-aligned memory slots supported\n");
-        }
-        abort();
-    }
+    /* kvm works in page size chunks, but the function may be called
+       with sub-page size and unaligned start address. */
+    size = TARGET_PAGE_ALIGN(size);
+    start_addr = TARGET_PAGE_ALIGN(start_addr);
 
     /* KVM does not support read-only slots */
     phys_offset &= ~IO_MEM_ROM;