• G
    cirrus: fix patterncopy checks · 95280c31
    Gerd Hoffmann 提交于
    The blit_region_is_unsafe checks don't work correctly for the
    patterncopy source.  It's a fixed-sized region, which doesn't
    depend on cirrus_blt_{width,height}.  So go do the check in
    cirrus_bitblt_common_patterncopy instead, then tell blit_is_unsafe that
    it doesn't need to verify the source.  Also handle the case where we
    blit from cirrus_bitbuf correctly.
    
    This patch replaces 5858dd18.
    
    Security impact:  I think for the most part error on the safe side this
    time, refusing blits which should have been allowed.
    
    Only exception is placing the blit source at the end of the video ram,
    so cirrus_blt_srcaddr + 256 goes beyond the end of video memory.  But
    even in that case I'm not fully sure this actually allows read access to
    host memory.  To trick the commit 5858dd18 security checks one has to
    pick very small cirrus_blt_{width,height} values, which in turn implies
    only a fraction of the blit source will actually be used.
    
    Cc: Wolfgang Bumiller <w.bumiller@proxmox.com>
    Cc: Dr. David Alan Gilbert <dgilbert@redhat.com>
    Signed-off-by: NGerd Hoffmann <kraxel@redhat.com>
    Reviewed-by: NDr. David Alan Gilbert <dgilbert@redhat.com>
    Reviewed-by: NWolfgang Bumiller <w.bumiller@proxmox.com>
    Reviewed-by: NLaurent Vivier <lvivier@redhat.com>
    Message-id: 1486645341-5010-1-git-send-email-kraxel@redhat.com
    95280c31
cirrus_vga.c 92.7 KB