• Heiko Carstens's avatar
    s390/kfence: fix page fault reporting · d9c2cf67
    Heiko Carstens authored
    Baoquan He reported lots of KFENCE reports when /proc/kcore is read,
    e.g. with crash or even simpler with dd:
    
     BUG: KFENCE: invalid read in copy_from_kernel_nofault+0x5e/0x120
     Invalid read at 0x00000000f4f5149f:
      copy_from_kernel_nofault+0x5e/0x120
      read_kcore+0x6b2/0x870
      proc_reg_read+0x9a/0xf0
      vfs_read+0x94/0x270
      ksys_read+0x70/0x100
      __do_syscall+0x1d0/0x200
      system_call+0x82/0xb0
    
    The reason for this is that read_kcore() simply reads memory that might
    have been unmapped by KFENCE with copy_from_kernel_nofault(). Any fault due
    to pages being unmapped by KFENCE would be handled gracefully by the fault
    handler (exception table fixup).
    
    However the s390 fault handler first reports the fault, and only afterwards
    would perform the exception table fixup. Most architectures have this in
    reversed order, which also avoids the false positive KFENCE reports when an
    unmapped page is accessed.
    
    Therefore change the s390 fault handler so it handles exception table
    fixups before KFENCE page faults are reported.
    Reported-by: default avatarBaoquan He <bhe@redhat.com>
    Tested-by: default avatarBaoquan He <bhe@redhat.com>
    Acked-by: default avatarAlexander Potapenko <glider@google.com>
    Link: https://lore.kernel.org/r/20230213183858.1473681-1-hca@linux.ibm.comSigned-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
    d9c2cf67
fault.c 23 KB