• Greg Kurz's avatar
    KVM: PPC: Book3S PR: Only install valid SLBs during KVM_SET_SREGS · f4093ee9
    Greg Kurz authored
    Userland passes an array of 64 SLB descriptors to KVM_SET_SREGS,
    some of which are valid (ie, SLB_ESID_V is set) and the rest are
    likely all-zeroes (with QEMU at least).
    
    Each of them is then passed to kvmppc_mmu_book3s_64_slbmte(), which
    assumes to find the SLB index in the 3 lower bits of its rb argument.
    When passed zeroed arguments, it happily overwrites the 0th SLB entry
    with zeroes. This is exactly what happens while doing live migration
    with QEMU when the destination pushes the incoming SLB descriptors to
    KVM PR. When reloading the SLBs at the next synchronization, QEMU first
    clears its SLB array and only restore valid ones, but the 0th one is
    now gone and we cannot access the corresponding memory anymore:
    
    (qemu) x/x $pc
    c0000000000b742c: Cannot access memory
    
    To avoid this, let's filter out non-valid SLB entries. While here, we
    also force a full SLB flush before installing new entries. Since SLB
    is for 64-bit only, we now build this path conditionally to avoid a
    build break on 32-bit, which doesn't define SLB_ESID_V.
    Signed-off-by: default avatarGreg Kurz <groug@kaod.org>
    Reviewed-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
    Signed-off-by: default avatarPaul Mackerras <paulus@ozlabs.org>
    f4093ee9
book3s_pr.c 46.4 KB