Skip to content

Commit d2d7039

Browse files
committed
HVM-841 QEMU VNC display driver mishandles SetPixelFormat (CVE-2015-8504)
1 parent 90643d5 commit d2d7039

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

Diff for: ui/vnc.c

+7-3
Original file line numberDiff line numberDiff line change
@@ -1816,18 +1816,22 @@ static void set_pixel_format(VncState *vs,
18161816
}
18171817

18181818
vs->clientds = *(vs->vd->guest.ds);
1819-
vs->clientds.pf.rmax = red_max;
1819+
1820+
vs->clientds.pf.rmax = red_max != 0 ? red_max : 0xff;
18201821
count_bits(vs->clientds.pf.rbits, red_max);
18211822
vs->clientds.pf.rshift = red_shift;
18221823
vs->clientds.pf.rmask = red_max << red_shift;
1823-
vs->clientds.pf.gmax = green_max;
1824+
1825+
vs->clientds.pf.gmax = green_max != 0 ? green_max : 0xff;
18241826
count_bits(vs->clientds.pf.gbits, green_max);
18251827
vs->clientds.pf.gshift = green_shift;
18261828
vs->clientds.pf.gmask = green_max << green_shift;
1827-
vs->clientds.pf.bmax = blue_max;
1829+
1830+
vs->clientds.pf.bmax = blue_max != 0 ? blue_max : 0xff;
18281831
count_bits(vs->clientds.pf.bbits, blue_max);
18291832
vs->clientds.pf.bshift = blue_shift;
18301833
vs->clientds.pf.bmask = blue_max << blue_shift;
1834+
18311835
vs->clientds.pf.bits_per_pixel = bits_per_pixel;
18321836
vs->clientds.pf.bytes_per_pixel = bits_per_pixel / 8;
18331837
vs->clientds.pf.depth = bits_per_pixel == 32 ? 24 : bits_per_pixel;

0 commit comments

Comments
 (0)