]> xenbits.xensource.com Git - people/pauldu/xen.git/commitdiff
viridian: don't blindly write to 32-bit registers if 'mode' is invalid
authorPaul Durrant <pdurrant@amazon.com>
Fri, 4 Dec 2020 12:12:54 +0000 (13:12 +0100)
committerJan Beulich <jbeulich@suse.com>
Fri, 4 Dec 2020 12:12:54 +0000 (13:12 +0100)
If hvm_guest_x86_mode() returns something other than 8 or 4 then
viridian_hypercall() will return immediately but, on the way out, will write
back status as if 'mode' was 4. This patch simply makes it leave the registers
alone.

NOTE: The formatting of the 'out' label and the switch statement are also
      adjusted as per CODING_STYLE.

Signed-off-by: Paul Durrant <pdurrant@amazon.com>
Acked-by: Wei Liu <wl@xen.org>
xen/arch/x86/hvm/viridian/viridian.c

index dc7183a54627dc5dbef9f3a9ba1962a24c1860d9..3dbb5c2d4cc1a52f2e9e55426d5320d1c98283ab 100644 (file)
@@ -692,13 +692,15 @@ int viridian_hypercall(struct cpu_user_regs *regs)
         break;
     }
 
-out:
+ out:
     output.result = status;
-    switch (mode) {
+    switch ( mode )
+    {
     case 8:
         regs->rax = output.raw;
         break;
-    default:
+
+    case 4:
         regs->rdx = output.raw >> 32;
         regs->rax = (uint32_t)output.raw;
         break;