Re: [PATCH v2 02/15] KVM: x86/xen: Bug the VM if 32-bit KVM observes a 64-bit mode hypercall

From: Binbin Wu

Date: Fri May 15 2026 - 02:47:16 EST




On 5/15/2026 5:53 AM, Sean Christopherson wrote:
> Bug the VM if 32-bit KVM attempts to handle a 64-bit hypercall, primarily
> so that a future change to set "input" in mode-specific code doesn't
> trigger a false positive warn=>error:
>
> arch/x86/kvm/xen.c:1687:6: error: variable 'input' is used uninitialized
> whenever 'if' condition is false [-Werror,-Wsometimes-uninitialized]
> 1687 | if (!longmode) {
> | ^~~~~~~~~
> arch/x86/kvm/xen.c:1708:31: note: uninitialized use occurs here
> 1708 | trace_kvm_xen_hypercall(cpl, input, params[0], params[1], params[2],
> | ^~~~~
> x86/kvm/xen.c:1687:2: note: remove the 'if' if its condition is always true
> 1687 | if (!longmode) {
> | ^~~~~~~~~~~~~~
> arch/x86/kvm/xen.c:1677:11: note: initialize the variable 'input' to silence this warning
> 1677 | u64 input, params[6], r = -ENOSYS;
> | ^
> 1 error generated.
>
> Note, params[] also has the same flaw, but -Wsometimes-uninitialized
> doesn't seem to be enforced for arrays, presumably because it's difficult
> to avoid false positives on specific entries.
>
> Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx>

Reviewed-by: Binbin Wu <binbin.wu@xxxxxxxxxxxxxxx>

> ---
> arch/x86/kvm/xen.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/kvm/xen.c b/arch/x86/kvm/xen.c
> index 91fd3673c09a..6d9be74bb673 100644
> --- a/arch/x86/kvm/xen.c
> +++ b/arch/x86/kvm/xen.c
> @@ -1694,16 +1694,19 @@ int kvm_xen_hypercall(struct kvm_vcpu *vcpu)
> params[4] = (u32)kvm_rdi_read(vcpu);
> params[5] = (u32)kvm_rbp_read(vcpu);
> }
> -#ifdef CONFIG_X86_64
> else {
> +#ifdef CONFIG_X86_64
> params[0] = (u64)kvm_rdi_read(vcpu);
> params[1] = (u64)kvm_rsi_read(vcpu);
> params[2] = (u64)kvm_rdx_read(vcpu);
> params[3] = (u64)kvm_r10_read(vcpu);
> params[4] = (u64)kvm_r8_read(vcpu);
> params[5] = (u64)kvm_r9_read(vcpu);
> - }
> +#else
> + KVM_BUG_ON(1, vcpu->kvm);
> + return -EIO;
> #endif
> + }
> cpl = kvm_x86_call(get_cpl)(vcpu);
> trace_kvm_xen_hypercall(cpl, input, params[0], params[1], params[2],
> params[3], params[4], params[5]);