• R
    x86/mm: Don't exceed the valid physical address space · 53e1345b
    Ralph Campbell 提交于
    mainline inclusion
    from mainline-5.1-rc3
    commit 92c77f7c
    category: bugfix
    bugzilla: 13519
    CVE: NA
    
    -------------------------------------------------
    
    valid_phys_addr_range() is used to sanity check the physical address range
    of an operation, e.g., access to /dev/mem. It uses __pa(high_memory)
    internally.
    
    If memory is populated at the end of the physical address space, then
    __pa(high_memory) is outside of the physical address space because:
    
       high_memory = (void *)__va(max_pfn * PAGE_SIZE - 1) + 1;
    
    For the comparison in valid_phys_addr_range() this is not an issue, but if
    CONFIG_DEBUG_VIRTUAL is enabled, __pa() maps to __phys_addr(), which
    verifies that the resulting physical address is within the valid physical
    address space of the CPU. So in the case that memory is populated at the
    end of the physical address space, this is not true and triggers a
    VIRTUAL_BUG_ON().
    
    Use __pa(high_memory - 1) to prevent the conversion from going beyond
    the end of valid physical addresses.
    
    Fixes: be62a320 ("x86/mm: Limit mmap() of /dev/mem to valid physical addresses")
    Signed-off-by: NRalph Campbell <rcampbell@nvidia.com>
    Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
    Cc: Craig Bergstrom <craigb@google.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Cc: Fengguang Wu <fengguang.wu@intel.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Hans Verkuil <hans.verkuil@cisco.com>
    Cc: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Sander Eikelenboom <linux@eikelenboom.it>
    Cc: Sean Young <sean@mess.org>
    
    Link: https://lkml.kernel.org/r/20190326001817.15413-2-rcampbell@nvidia.comSigned-off-by: NChen Zhou <chenzhou10@huawei.com>
    Reviewed-by: Nzhong jiang <zhongjiang@huawei.com>
    Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
    53e1345b
mmap.c 7.6 KB