• A
    memory: use signed arithmetic · 8417cebf
    Avi Kivity 提交于
    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: NRichard Henderson <rth@twiddle.net>
    Signed-off-by: NAvi Kivity <avi@redhat.com>
    Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
    8417cebf
memory.c 32.7 KB