Re: [PATCH] RISC-V: KVM: Fix invalid HVA warning in steal-time recording
Anup Patel <[email protected]>
| Newsgroups | org.infradead.lists.kvm-riscv,org.infradead.lists.linux-riscv,org.kernel.vger.kvm,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <CAAhSdy0CSbsmdjCu36F-8-CD4A2Sfz4Q4OYa3i=9o1MJeVT8=w@mail.gmail.com> |
On Wed, Apr 15, 2026 at 1:22 PM Jiakai Xu <[email protected]> wrote: > > kvm_riscv_vcpu_record_steal_time() assumes that the steal-time shared > memory GPA (vcpu->arch.sta.shmem) is always backed by a valid guest > memory slot. However, this assumption is not guaranteed by the KVM > userspace ABI. > > A malicious or buggy userspace can set the STA shared memory GPA via > KVM_SET_ONE_REG without establishing a corresponding memory region via > KVM_SET_USER_MEMORY_REGION. In such cases, the GPA cannot be translated > to a valid HVA and kvm_vcpu_gfn_to_hva() returns an error address. > > The current implementation incorrectly treats this as a kernel warning > using WARN_ON(), which may escalate to a kernel panic when panic_on_warn > is enabled. > > This is not a kernel bug condition but a normal invalid configuration > from userspace, and should be handled gracefully. > > Fix it by removing WARN_ON() and treating invalid HVA as a normal > failure case, resetting the STA shared memory state. > > Fixes: e9f12b5fff8ad0 ("RISC-V: KVM: Implement SBI STA extension") > Signed-off-by: Jiakai Xu <[email protected]> > Signed-off-by: Jiakai Xu <[email protected]> > Assisted-by: OpenClaw:DeepSeek-V3.2 Queued this as fix for Linux-7.1-rcX Thanks, Anup > --- > arch/riscv/kvm/vcpu_sbi_sta.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/riscv/kvm/vcpu_sbi_sta.c b/arch/riscv/kvm/vcpu_sbi_sta.c > index 3b834709b429f..60e50296a0085 100644 > --- a/arch/riscv/kvm/vcpu_sbi_sta.c > +++ b/arch/riscv/kvm/vcpu_sbi_sta.c > @@ -46,7 +46,7 @@ void kvm_riscv_vcpu_record_steal_time(struct kvm_vcpu *vcpu) > gfn = shmem >> PAGE_SHIFT; > hva = kvm_vcpu_gfn_to_hva(vcpu, gfn); > > - if (WARN_ON(kvm_is_error_hva(hva))) { > + if (kvm_is_error_hva(hva)) { > vcpu->arch.sta.shmem = INVALID_GPA; > return; > } > -- > 2.34.1 > -- kvm-riscv mailing list [email protected] http://lists.infradead.org/mailman/listinfo/kvm-riscv