Skip to content

Commit 4a52082

Browse files
Andrew Jonesgregkh
authored andcommitted
RISC-V: KVM: Fix sbiret init before forwarding to userspace
[ Upstream commit 6b7b282 ] When forwarding SBI calls to userspace ensure sbiret.error is initialized to SBI_ERR_NOT_SUPPORTED first, in case userspace neglects to set it to anything. If userspace neglects it then we can't be sure it did anything else either, so we just report it didn't do or try anything. Just init sbiret.value to zero, which is the preferred value to return when nothing special is specified. KVM was already initializing both sbiret.error and sbiret.value, but the values used appear to come from a copy+paste of the __sbi_ecall() implementation, i.e. a0 and a1, which don't apply prior to the call being executed, nor at all when forwarding to userspace. Fixes: dea8ee3 ("RISC-V: KVM: Add SBI v0.1 support") Signed-off-by: Andrew Jones <ajones@ventanamicro.com> Link: https://lore.kernel.org/r/20240807154943.150540-2-ajones@ventanamicro.com Signed-off-by: Anup Patel <anup@brainfault.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent efb9eee commit 4a52082

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

arch/riscv/kvm/vcpu_sbi.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,8 @@ void kvm_riscv_vcpu_sbi_forward(struct kvm_vcpu *vcpu, struct kvm_run *run)
127127
run->riscv_sbi.args[3] = cp->a3;
128128
run->riscv_sbi.args[4] = cp->a4;
129129
run->riscv_sbi.args[5] = cp->a5;
130-
run->riscv_sbi.ret[0] = cp->a0;
131-
run->riscv_sbi.ret[1] = cp->a1;
130+
run->riscv_sbi.ret[0] = SBI_ERR_NOT_SUPPORTED;
131+
run->riscv_sbi.ret[1] = 0;
132132
}
133133

134134
void kvm_riscv_vcpu_sbi_system_reset(struct kvm_vcpu *vcpu,

0 commit comments

Comments
 (0)