]> git.proxmox.com Git - qemu.git/commit
target-i386: fix abort on bad PML4E/PDPTE/PDE/PTE addresses
authorLuiz Capitulino <lcapitulino@redhat.com>
Tue, 28 May 2013 18:19:22 +0000 (14:19 -0400)
committerMichael Roth <mdroth@linux.vnet.ibm.com>
Tue, 11 Jun 2013 22:19:47 +0000 (17:19 -0500)
commitd503afb28d4df3f558f07329c3bd0325f9f68d1a
tree7a7f0e7fd009643946aef9fd3f91c68dd5b06dfc
parent5b3ca29b959ef45f084e5698d06e9a2fd254564a
target-i386: fix abort on bad PML4E/PDPTE/PDE/PTE addresses

The code used to walk IA-32e page-tables, and possibly PAE page-tables,
uses the bit mask ~0xfff to get the next PML4E/PDPTE/PDE/PTE address.

However, as we use a uint64_t to store the resulting address, that mask
gets expanded to 0xfffffffffffff000 which not only ends up selecting
reserved bits but also selects the XD bit (execute-disable) which
happens to be enabled by Windows 8, causing qemu_get_ram_ptr() to abort.

This commit fixes that problem by replacing ~0xfff by a correct mask
that only selects the address bit range (ie. bits 51:12).

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
(cherry picked from commit fbc2ed9518efcdcdcbf0adb9539c17a65addd20a)

Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
target-i386/arch_memory_mapping.c