• Suraj Jitindar Singh's avatar
    KVM: PPC: Book3S HV: Sanitise hv_regs on nested guest entry · 73937deb
    Suraj Jitindar Singh authored
    restore_hv_regs() is used to copy the hv_regs L1 wants to set to run the
    nested (L2) guest into the vcpu structure. We need to sanitise these
    values to ensure we don't let the L1 guest hypervisor do things we don't
    want it to.
    
    We don't let data address watchpoints or completed instruction address
    breakpoints be set to match in hypervisor state.
    
    We also don't let L1 enable features in the hypervisor facility status
    and control register (HFSCR) for L2 which we have disabled for L1. That
    is L2 will get the subset of features which the L0 hypervisor has
    enabled for L1 and the features L1 wants to enable for L2. This could
    mean we give L1 a hypervisor facility unavailable interrupt for a
    facility it thinks it has enabled, however it shouldn't have enabled a
    facility it itself doesn't have for the L2 guest.
    
    We sanitise the registers when copying in the L2 hv_regs. We don't need
    to sanitise when copying back the L1 hv_regs since these shouldn't be
    able to contain invalid values as they're just what was copied out.
    Reviewed-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
    Signed-off-by: default avatarSuraj Jitindar Singh <sjitindarsingh@gmail.com>
    Signed-off-by: default avatarPaul Mackerras <paulus@ozlabs.org>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    73937deb
reg.h 62.3 KB