[pve-devel] [PATCH pve-qemu-kvm] fix #991: Can't install Win7/8

Thomas Lamprecht t.lamprecht at proxmox.com
Wed May 11 14:53:46 CEST 2016


comments inline

On 05/11/2016 02:30 PM, Wolfgang Link wrote:
> ---
>  Makefile | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/Makefile b/Makefile
> index 67b30dd..07cd162 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -24,7 +24,8 @@ download:
>  	#git clone git://git.qemu-project.org/qemu.git -b stable-2.4 ${KVMDIR} 
>  	git clone git://git.qemu-project.org/qemu.git ${KVMDIR}
>  	# see https://bugs.launchpad.net/qemu/+bug/1488363?comments=all
> -	cd ${KVMDIR}; git checkout v2.5.1.1; git revert --no-edit b8eb5512fd8a115f164edbbe897cdf8884920ccb
> +	# see for 44b https://bugzilla.proxmox.com/show_bug.cgi?id=991
> +	cd ${KVMDIR}; git checkout v2.5.1.1; git revert --no-edit b8eb5512fd8a115f164edbbe897cdf8884920ccb; git revert --no-edit 44b86aa32e4147c727fadd9a0f0bc503a5dedb72;

The second commit reverts a CVE fix? Its a fix for a DoS of the guest so
it may be seen as less critical but still, is upstream informed on this,
I mean if this one breaks win7/8 also in qemu 2.6 this could be a
blocker for them...

Respective commit is:

> commit 44b86aa32e4147c727fadd9a0f0bc503a5dedb72
> Author: Gerd Hoffmann <kraxel at redhat.com>
> Date:   Tue Apr 26 14:48:06 2016 +0200
>
>     vga: make sure vga register setup for vbe stays intact
> (CVE-2016-3712).
>    
>     Call vbe_update_vgaregs() when the guest touches GFX, SEQ or CRT
>     registers, to make sure the vga registers will always have the
>     values needed by vbe mode.  This makes sure the sanity checks
>     applied by vbe_fixup_regs() are effective.
>    
>     Without this guests can muck with shift_control, can turn on planar
>     vga modes or text mode emulation while VBE is active, making qemu
>     take code paths meant for CGA compatibility, but with the very
>     large display widths and heigts settable using VBE registers.
>    
>     Which is good for one or another buffer overflow.  Not that
>     critical as they typically read overflows happening somewhere
>     in the display code.  So guests can DoS by crashing qemu with a
>     segfault, but it is probably not possible to break out of the VM.
>    
>     Fixes: CVE-2016-3712
>     Reported-by: Zuozhi Fzz <zuozhi.fzz at alibaba-inc.com>
>     Reported-by: P J P <ppandit at redhat.com>
>     Signed-off-by: Gerd Hoffmann <kraxel at redhat.com>
>     Signed-off-by: Michael Roth <mdroth at linux.vnet.ibm.com>
>
> diff --git a/hw/display/vga.c b/hw/display/vga.c
> index 10ac7df..679070e 100644
> --- a/hw/display/vga.c
> +++ b/hw/display/vga.c
> @@ -140,6 +140,8 @@ static uint32_t expand4[256];
>  static uint16_t expand2[256];
>  static uint8_t expand4to8[16];
>  
> +static void vbe_update_vgaregs(VGACommonState *s);
> +
>  static inline bool vbe_enabled(VGACommonState *s)
>  {
>      return s->vbe_regs[VBE_DISPI_INDEX_ENABLE] & VBE_DISPI_ENABLED;
> @@ -482,6 +484,7 @@ void vga_ioport_write(void *opaque, uint32_t addr,
> uint32_t val)
>          printf("vga: write SR%x = 0x%02x\n", s->sr_index, val);
>  #endif
>          s->sr[s->sr_index] = val & sr_mask[s->sr_index];
> +        vbe_update_vgaregs(s);
>          if (s->sr_index == VGA_SEQ_CLOCK_MODE) {
>              s->update_retrace_info(s);
>          }
> @@ -513,6 +516,7 @@ void vga_ioport_write(void *opaque, uint32_t addr,
> uint32_t val)
>          printf("vga: write GR%x = 0x%02x\n", s->gr_index, val);
>  #endif
>          s->gr[s->gr_index] = val & gr_mask[s->gr_index];
> +        vbe_update_vgaregs(s);
>          vga_update_memory_access(s);
>          break;
>      case VGA_CRT_IM:
> @@ -531,10 +535,12 @@ void vga_ioport_write(void *opaque, uint32_t
> addr, uint32_t val)
>              if (s->cr_index == VGA_CRTC_OVERFLOW) {
>                  s->cr[VGA_CRTC_OVERFLOW] = (s->cr[VGA_CRTC_OVERFLOW]
> & ~0x10) |
>                      (val & 0x10);
> +                vbe_update_vgaregs(s);
>              }
>              return;
>          }
>          s->cr[s->cr_index] = val;
> +        vbe_update_vgaregs(s);
>  
>          switch(s->cr_index) {
>          case VGA_CRTC_H_TOTAL:
>

I'll do some checks on QEMU 2.6-rc5 which includes this also.
For the future, could you please explain in the CI message which commit
you revert and why, not that we open a security hole because of a
"workaround" by accident.

Thanks,
Thomas

>  	tar czf ${KVMSRC} --exclude CVS --exclude .git --exclude .svn ${KVMDIR}
>  
>  ${DEBS} kvm: ${KVMSRC}





More information about the pve-devel mailing list