x86/hvm: Fix shifting in stdvga_mem_read()
authorAndrew Cooper <andrew.cooper3@citrix.com>
Sat, 16 May 2020 18:50:45 +0000 (19:50 +0100)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Mon, 18 May 2020 14:22:53 +0000 (15:22 +0100)
stdvga_mem_read() has a return type of uint8_t, which promotes to int rather
than unsigned int.  Shifting by 24 may hit the sign bit.

Spotted by Coverity.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
xen/arch/x86/hvm/stdvga.c

index bd398dbb1b2993b051241697572688bdfb6fa3ba..e2675139e7f8cb78f9e5b6a098f2b20193d846af 100644 (file)
@@ -322,7 +322,7 @@ static int stdvga_mem_read(const struct hvm_io_handler *handler,
         data = stdvga_mem_readb(addr);
         data |= stdvga_mem_readb(addr + 1) << 8;
         data |= stdvga_mem_readb(addr + 2) << 16;
-        data |= stdvga_mem_readb(addr + 3) << 24;
+        data |= (uint32_t)stdvga_mem_readb(addr + 3) << 24;
         break;
 
     case 8: