• Jin Dongming's avatar
    thp: fix the wrong reported address of hwpoisoned hugepages · a6d30ddd
    Jin Dongming authored
    When the tail page of THP is poisoned, the head page will be poisoned too.
     And the wrong address, address of head page, will be sent with sigbus
    always.
    
    So when the poisoned page is used by Guest OS which is running on KVM,
    after the address changing(hva->gpa) by qemu, the unexpected process on
    Guest OS will be killed by sigbus.
    
    What we expected is that the process using the poisoned tail page could be
    killed on Guest OS, but not that the process using the healthy head page
    is killed.
    
    Since it is not good to poison the healthy page, avoid poisoning other
    than the page which is really poisoned.
      (While we poison all pages in a huge page in case of hugetlb,
       we can do this for THP thanks to split_huge_page().)
    
    Here we fix two parts:
      1. Isolate the poisoned page only to make sure
         the reported address is the address of poisoned page.
      2. make the poisoned page work as the poisoned regular page.
    
    [akpm@linux-foundation.org: fix spello in comment]
    Signed-off-by: default avatarJin Dongming <jin.dongming@np.css.fujitsu.com>
    Reviewed-by: default avatarHidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: Andi Kleen <andi@firstfloor.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a6d30ddd
huge_memory.c 60.8 KB