• T
    x86/mm/pat: Fix BUG_ON() in mmap_mem() on QEMU/i386 · 1886297c
    Toshi Kani 提交于
    The following BUG_ON() crash was reported on QEMU/i386:
    
      kernel BUG at arch/x86/mm/physaddr.c:79!
      Call Trace:
      phys_mem_access_prot_allowed
      mmap_mem
      ? mmap_region
      mmap_region
      do_mmap
      vm_mmap_pgoff
      SyS_mmap_pgoff
      do_int80_syscall_32
      entry_INT80_32
    
    after commit:
    
      edfe63ec ("x86/mtrr: Fix Xorg crashes in Qemu sessions")
    
    PAT is now set to disabled state when MTRRs are disabled.
    Thus, reactivating the __pa(high_memory) check in
    phys_mem_access_prot_allowed().
    
    When CONFIG_DEBUG_VIRTUAL is set, __pa() calls __phys_addr(),
    which in turn calls slow_virt_to_phys() for 'high_memory'.
    Because 'high_memory' is set to (the max direct mapped virt
    addr + 1), it is not a valid virtual address.  Hence,
    slow_virt_to_phys() returns 0 and hit the BUG_ON.  Using
    __pa_nodebug() instead of __pa() will fix this BUG_ON.
    
    However, this code block, originally written for Pentiums and
    earlier, is no longer adequate since a 32-bit Xen guest has
    MTRRs disabled and supports ZONE_HIGHMEM.  In this setup,
    this code sets UC attribute for accessing RAM in high memory
    range.
    
    Delete this code block as it has been unused for a long time.
    Reported-by: Nkernel test robot <ying.huang@linux.intel.com>
    Reviewed-by: NBorislav Petkov <bp@suse.de>
    Signed-off-by: NToshi Kani <toshi.kani@hpe.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: David Vrabel <david.vrabel@citrix.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: xen-devel@lists.xenproject.org
    Link: http://lkml.kernel.org/r/1460403360-25441-1-git-send-email-toshi.kani@hpe.com
    Link: https://lkml.org/lkml/2016/4/1/608Signed-off-by: NIngo Molnar <mingo@kernel.org>
    1886297c
pat.c 27.8 KB