• Anup Patel's avatar
    RISC-V: KVM: Fix GPA passed to __kvm_riscv_hfence_gvma_xyz() functions · 7c8de080
    Anup Patel authored
    The parameter passed to HFENCE.GVMA instruction in rs1 register
    is guest physical address right shifted by 2 (i.e. divided by 4).
    
    Unfortunately, we overlooked the semantics of rs1 registers for
    HFENCE.GVMA instruction and never right shifted guest physical
    address by 2. This issue did not manifest for hypervisors till
    now because:
      1) Currently, only __kvm_riscv_hfence_gvma_all() and SBI
         HFENCE calls are used to invalidate TLB.
      2) All H-extension implementations (such as QEMU, Spike,
         Rocket Core FPGA, etc) that we tried till now were
         conservatively flushing everything upon any HFENCE.GVMA
         instruction.
    
    This patch fixes GPA passed to __kvm_riscv_hfence_gvma_vmid_gpa()
    and __kvm_riscv_hfence_gvma_gpa() functions.
    
    Fixes: fd7bb4a2 ("RISC-V: KVM: Implement VMID allocator")
    Reported-by: default avatarIan Huang <ihuang@ventanamicro.com>
    Signed-off-by: default avatarAnup Patel <anup.patel@wdc.com>
    Message-Id: <20211026170136.2147619-4-anup.patel@wdc.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    7c8de080
tlb.S 1.49 KB