mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-12-18 05:28:36 -07:00
memory: use signed arithmetic
When trying to map an alias of a ram region, where the alias starts at address A and we map it into address B, and A > B, we had an arithmetic underflow. Because we use unsigned arithmetic, the underflow converted into a large number which failed addrrange_intersects() tests. The concrete example which triggered this was cirrus vga mapping the framebuffer at offsets 0xc0000-0xc7fff (relative to the start of the framebuffer) into offsets 0xa0000 (relative to system addres space start). With our favorite analogy of a windowing system, this is equivalent to dragging a subwindow off the left edge of the screen, and failing to clip it into its parent window which is on screen. Fix by switching to signed arithmetic. Signed-off-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Avi Kivity <avi@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
39b796f28c
commit
8417cebfda
2 changed files with 15 additions and 10 deletions
2
exec.c
2
exec.c
|
|
@ -3818,7 +3818,7 @@ static void io_mem_init(void)
|
|||
static void memory_map_init(void)
|
||||
{
|
||||
system_memory = qemu_malloc(sizeof(*system_memory));
|
||||
memory_region_init(system_memory, "system", UINT64_MAX);
|
||||
memory_region_init(system_memory, "system", INT64_MAX);
|
||||
set_system_memory_map(system_memory);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue