]> git.proxmox.com Git - qemu.git/commit - exec.c
memory: use signed arithmetic
authorAvi Kivity <avi@redhat.com>
Wed, 3 Aug 2011 08:56:14 +0000 (11:56 +0300)
committerAnthony Liguori <aliguori@us.ibm.com>
Fri, 5 Aug 2011 15:57:36 +0000 (10:57 -0500)
commit8417cebfda193c7f9ca70be5e308eaa92cf84b94
treeeda047bcb27a66a65875f4b1b9daa195a7f4b6f6
parent39b796f28c7b42cbecdba56612b5f9c505572f07
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>
exec.c
memory.c