• G
    cirrus/vnc: zap bitblit support from console code. · 63fdb094
    Gerd Hoffmann 提交于
    There is a special code path (dpy_gfx_copy) to allow graphic emulation
    notify user interface code about bitblit operations carryed out by
    guests.  It is supported by cirrus and vnc server.  The intended purpose
    is to optimize display scrolls and just send over the scroll op instead
    of a full display update.
    
    This is rarely used these days though because modern guests simply don't
    use the cirrus blitter any more.  Any linux guest using the cirrus drm
    driver doesn't.  Any windows guest newer than winxp doesn't ship with a
    cirrus driver any more and thus uses the cirrus as simple framebuffer.
    
    So this code tends to bitrot and bugs can go unnoticed for a long time.
    See for example commit "3e10c3ec vnc: fix qemu crash because of SIGSEGV"
    which fixes a bug lingering in the code for almost a year, added by
    commit "c7628bff vnc: only alloc server surface with clients connected".
    
    Also the vnc server will throttle the frame rate in case it figures the
    network can't keep up (send buffers are full).  This doesn't work with
    dpy_gfx_copy, for any copy operation sent to the vnc client we have to
    send all outstanding updates beforehand, otherwise the vnc client might
    run the client side blit on outdated data and thereby corrupt the
    display.  So this dpy_gfx_copy "optimization" might even make things
    worse on slow network links.
    
    Lets kill it once for all.
    
    Oh, and one more reason: Turns out (after writing the patch) we have a
    security bug in that code path ...
    
    Fixes: CVE-2016-9603
    Signed-off-by: NGerd Hoffmann <kraxel@redhat.com>
    Message-id: 1489494419-14340-1-git-send-email-kraxel@redhat.com
    (cherry picked from commit 50628d34)
    Signed-off-by: NMichael Roth <mdroth@linux.vnet.ibm.com>
    63fdb094
console.c 59.2 KB