From: Paul Durrant Date: Fri, 4 Dec 2020 12:12:54 +0000 (+0100) Subject: viridian: don't blindly write to 32-bit registers if 'mode' is invalid X-Git-Tag: archive/raspbian/4.16.0+51-g0941d6cb-1+rpi1~2^2~42^2~1360 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=7c8946dae39b544094d969ef902d49e8ea0ea973;p=xen.git viridian: don't blindly write to 32-bit registers if 'mode' is invalid 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 Acked-by: Wei Liu --- diff --git a/xen/arch/x86/hvm/viridian/viridian.c b/xen/arch/x86/hvm/viridian/viridian.c index dc7183a546..3dbb5c2d4c 100644 --- a/xen/arch/x86/hvm/viridian/viridian.c +++ b/xen/arch/x86/hvm/viridian/viridian.c @@ -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;