• Paul Mackerras's avatar
    KVM: PPC: Book3S HV: Avoid crash from THP collapse during radix page fault · 6579804c
    Paul Mackerras authored
    Commit 71d29f43 ("KVM: PPC: Book3S HV: Don't use compound_order to
    determine host mapping size", 2018-09-11) added a call to 
    __find_linux_pte() and a dereference of the returned PTE pointer to the
    radix page fault path in the common case where the page is normal
    system memory.  Previously, __find_linux_pte() was only called for
    mappings to physical addresses which don't have a page struct (e.g.
    memory-mapped I/O) or where the page struct is marked as reserved
    memory.
    
    This exposes us to the possibility that the returned PTE pointer
    could be NULL, for example in the case of a concurrent THP collapse
    operation.  Dereferencing the returned NULL pointer causes a host
    crash.
    
    To fix this, we check for NULL, and if it is NULL, we retry the
    operation by returning to the guest, with the expectation that it
    will generate the same page fault again (unless of course it has
    been fixed up by another CPU in the meantime).
    
    Fixes: 71d29f43 ("KVM: PPC: Book3S HV: Don't use compound_order to determine host mapping size")
    Signed-off-by: default avatarPaul Mackerras <paulus@ozlabs.org>
    6579804c
book3s_64_mmu_radix.c 22.1 KB