mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-30 22:26:55 +00:00
RISC-V: KVM: Use correct restricted types
__le32 and __le64 types should be used with le32_to_cpu() and
le64_to_cpu() and __user is needed for pointers referencing
guest memory, as sparse helpfully points out.
Fixes: e9f12b5fff
("RISC-V: KVM: Implement SBI STA extension")
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202401020142.lwFEDK5v-lkp@intel.com/
Signed-off-by: Andrew Jones <ajones@ventanamicro.com>
Reviewed-by: Atish Patra <atishp@rivosinc.com>
Signed-off-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
parent
3752219b60
commit
f072b272aa
1 changed files with 12 additions and 8 deletions
|
@ -26,8 +26,12 @@ void kvm_riscv_vcpu_record_steal_time(struct kvm_vcpu *vcpu)
|
|||
{
|
||||
gpa_t shmem = vcpu->arch.sta.shmem;
|
||||
u64 last_steal = vcpu->arch.sta.last_steal;
|
||||
u32 *sequence_ptr, sequence;
|
||||
u64 *steal_ptr, steal;
|
||||
__le32 __user *sequence_ptr;
|
||||
__le64 __user *steal_ptr;
|
||||
__le32 sequence_le;
|
||||
__le64 steal_le;
|
||||
u32 sequence;
|
||||
u64 steal;
|
||||
unsigned long hva;
|
||||
gfn_t gfn;
|
||||
|
||||
|
@ -47,22 +51,22 @@ void kvm_riscv_vcpu_record_steal_time(struct kvm_vcpu *vcpu)
|
|||
return;
|
||||
}
|
||||
|
||||
sequence_ptr = (u32 *)(hva + offset_in_page(shmem) +
|
||||
sequence_ptr = (__le32 __user *)(hva + offset_in_page(shmem) +
|
||||
offsetof(struct sbi_sta_struct, sequence));
|
||||
steal_ptr = (u64 *)(hva + offset_in_page(shmem) +
|
||||
steal_ptr = (__le64 __user *)(hva + offset_in_page(shmem) +
|
||||
offsetof(struct sbi_sta_struct, steal));
|
||||
|
||||
if (WARN_ON(get_user(sequence, sequence_ptr)))
|
||||
if (WARN_ON(get_user(sequence_le, sequence_ptr)))
|
||||
return;
|
||||
|
||||
sequence = le32_to_cpu(sequence);
|
||||
sequence = le32_to_cpu(sequence_le);
|
||||
sequence += 1;
|
||||
|
||||
if (WARN_ON(put_user(cpu_to_le32(sequence), sequence_ptr)))
|
||||
return;
|
||||
|
||||
if (!WARN_ON(get_user(steal, steal_ptr))) {
|
||||
steal = le64_to_cpu(steal);
|
||||
if (!WARN_ON(get_user(steal_le, steal_ptr))) {
|
||||
steal = le64_to_cpu(steal_le);
|
||||
vcpu->arch.sta.last_steal = READ_ONCE(current->sched_info.run_delay);
|
||||
steal += vcpu->arch.sta.last_steal - last_steal;
|
||||
WARN_ON(put_user(cpu_to_le64(steal), steal_ptr));
|
||||
|
|
Loading…
Reference in a new issue