diff options
author | Avi Kivity <avi@redhat.com> | 2011-08-03 11:56:14 +0300 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2011-08-05 10:57:36 -0500 |
commit | 15ab1500cb694f1d91b799ddfefd571a9f0ea2eb (patch) | |
tree | eda047bcb27a66a65875f4b1b9daa195a7f4b6f6 /linux-user | |
parent | 8634af8344dbde8339801ac497a01ae8ed129dbf (diff) | |
download | qemu-15ab1500cb694f1d91b799ddfefd571a9f0ea2eb.tar.gz qemu-15ab1500cb694f1d91b799ddfefd571a9f0ea2eb.tar.bz2 qemu-15ab1500cb694f1d91b799ddfefd571a9f0ea2eb.zip |
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>
Diffstat (limited to 'linux-user')
0 files changed, 0 insertions, 0 deletions