Commit 818f86b8 authored by Michael S. Tsirkin's avatar Michael S. Tsirkin
Browse files

exec: limit system memory size



The page table logic in exec.c assumes
that memory addresses are at most TARGET_PHYS_ADDR_SPACE_BITS.

But pci addresses are full 64 bit so if we try to render them ignoring
the extra bits, we get strange effects with sections overlapping each
other.

To fix, simply limit the system memory size to
 1 << TARGET_PHYS_ADDR_SPACE_BITS,
pci addresses will be rendered within that.

Cc: qemu-stable@nongnu.org
Reported-by: default avatarAndreas Färber <afaerber@suse.de>
Reviewed-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
parent 98af2ac9
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -1741,7 +1741,12 @@ void address_space_destroy_dispatch(AddressSpace *as)
static void memory_map_init(void)
{
    system_memory = g_malloc(sizeof(*system_memory));
    memory_region_init(system_memory, NULL, "system", INT64_MAX);

    assert(TARGET_PHYS_ADDR_SPACE_BITS <= 64);

    memory_region_init(system_memory, NULL, "system",
                       TARGET_PHYS_ADDR_SPACE_BITS == 64 ?
                       UINT64_MAX : (0x1ULL << TARGET_PHYS_ADDR_SPACE_BITS));
    address_space_init(&address_space_memory, system_memory, "memory");

    system_io = g_malloc(sizeof(*system_io));