| Message ID | 20260311231833.13189-1-osama.abdelkader@gmail.com |
|---|---|
| State | Accepted |
| Headers | show |
| Series | [v2] RISC-V: KVM: fix PMU snapshot_set_shmem on 32-bit hosts | expand |
On Thu, Mar 12, 2026 at 4:48 AM Osama Abdelkader <osama.abdelkader@gmail.com> wrote: > > When saddr_high != 0 on RV32, the goto out was unconditional, causing > valid 64-bit addresses to be rejected. Only goto out when the address > is invalid (64-bit host with saddr_high != 0). > > Fixes: c2f41ddbcdd7 ("RISC-V: KVM: Implement SBI PMU Snapshot feature") > Signed-off-by: Osama Abdelkader <osama.abdelkader@gmail.com> > Reviewed-by: Andrew Jones <andrew.jones@oss.qualcomm.com> Queued this patch for Linux-7.1 Thanks, Anup > --- > v2: > - balance braces properly > --- > arch/riscv/kvm/vcpu_pmu.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/arch/riscv/kvm/vcpu_pmu.c b/arch/riscv/kvm/vcpu_pmu.c > index 4d8d5e9aa53d..ec0c15726da9 100644 > --- a/arch/riscv/kvm/vcpu_pmu.c > +++ b/arch/riscv/kvm/vcpu_pmu.c > @@ -423,11 +423,12 @@ int kvm_riscv_vcpu_pmu_snapshot_set_shmem(struct kvm_vcpu *vcpu, unsigned long s > saddr = saddr_low; > > if (saddr_high != 0) { > - if (IS_ENABLED(CONFIG_32BIT)) > + if (IS_ENABLED(CONFIG_32BIT)) { > saddr |= ((gpa_t)saddr_high << 32); > - else > + } else { > sbiret = SBI_ERR_INVALID_ADDRESS; > - goto out; > + goto out; > + } > } > > kvpmu->sdata = kzalloc(snapshot_area_size, GFP_ATOMIC); > -- > 2.43.0 >
diff --git a/arch/riscv/kvm/vcpu_pmu.c b/arch/riscv/kvm/vcpu_pmu.c index 4d8d5e9aa53d..ec0c15726da9 100644 --- a/arch/riscv/kvm/vcpu_pmu.c +++ b/arch/riscv/kvm/vcpu_pmu.c @@ -423,11 +423,12 @@ int kvm_riscv_vcpu_pmu_snapshot_set_shmem(struct kvm_vcpu *vcpu, unsigned long s saddr = saddr_low; if (saddr_high != 0) { - if (IS_ENABLED(CONFIG_32BIT)) + if (IS_ENABLED(CONFIG_32BIT)) { saddr |= ((gpa_t)saddr_high << 32); - else + } else { sbiret = SBI_ERR_INVALID_ADDRESS; - goto out; + goto out; + } } kvpmu->sdata = kzalloc(snapshot_area_size, GFP_ATOMIC);
When saddr_high != 0 on RV32, the goto out was unconditional, causing valid 64-bit addresses to be rejected. Only goto out when the address is invalid (64-bit host with saddr_high != 0). Fixes: c2f41ddbcdd7 ("RISC-V: KVM: Implement SBI PMU Snapshot feature") Signed-off-by: Osama Abdelkader <osama.abdelkader@gmail.com> Reviewed-by: Andrew Jones <andrew.jones@oss.qualcomm.com> --- v2: - balance braces properly --- arch/riscv/kvm/vcpu_pmu.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)