• Paul Mackerras's avatar
    KVM: PPC: Book3S HV: Reload HTM registers explicitly · 17d38105
    Paul Mackerras authored
    Commit 46a704f8 ("KVM: PPC: Book3S HV: Preserve userspace HTM
    state properly", 2017-06-15) added code which assumes that the kernel
    is able to handle a TM (transactional memory) unavailable interrupt
    from userspace by reloading the TM-related registers and enabling TM
    for the process.  That ability was added in the 4.9 kernel; earlier
    kernel versions simply panic on getting the TM unavailable interrupt.
    
    Since commit 46a704f8 has been backported to the 4.4 stable tree
    as commit 824b9506, 4.4.75 and subsequent versions are vulnerable
    to a userspace-triggerable panic.
    
    This patch fixes the problem by explicitly reloading the TM-related
    registers before returning to userspace, rather than disabling TM
    for the process.
    
    Commit 46a704f8 also failed to enable TM for the kernel, leading
    to a TM unavailable interrupt in the kernel, causing an oops.  This
    fixes that problem too, by enabling TM before accessing the TM
    registers.  That problem is fixed upstream by the patch "KVM: PPC:
    Book3S HV: Enable TM before accessing TM registers".
    
    Fixes: 824b9506 ("KVM: PPC: Book3S HV: Preserve userspace HTM state properly")
    Signed-off-by: default avatarPaul Mackerras <paulus@ozlabs.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    17d38105
book3s_hv.c 83.9 KB