ARM: LPAE: don't reject mapping /dev/mem above 4GB
PATCH v3 1/1 ARM: LPAE: don't reject mapping /dev/mem above 4GB
With LPAE enabled, physical address space is larger than 4GB. Allow mapping any part of it via /dev/mem by using PHYS_MASK to determine valid range.
PHYS_MASK covers 40 bits with LPAE enabled and 32 bits otherwise.
Reported-by Vassili Karpov <[email protected]>
Signed-off-by Sergey Dyasly <[email protected]>
---
v3:
- Fixed 32-bit overflow
v2:
- Removed #ifdef and changed original function
arch/arm/mm/mmap.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
arch/arm/mm/mmap.c +2 -4
@@ -204,13 +204,11 @@ int valid_phys_addr_range(phys_addr_t addr, size_t size) }/* -* We don't use supersection mappings for mmap() on /dev/mem, which -* means that we can't map the memory area above the 4G barrier into -* userspace. +* Do not allow /dev/mem mappings beyond the supported physical range. */ int valid_mmap_phys_addr_range (unsigned long pfn,size_t size) { -return !(pfn + (size >>PAGE_SHIFT ) >0x00100000 ); +return (pfn + (size >>PAGE_SHIFT )) <= (1 + (PHYS_MASK >>PAGE_SHIFT )); }#ifdef CONFIG_STRICT_DEVMEM
Signature · 1 line
1.8.1.2
PATCH v3 1/1 ARM: LPAE: don't reject mapping /dev/mem above 4GB
Quoted 7 lines · Sergey Dyasly
With LPAE enabled, physical address space is larger than 4GB. Allow mapping any part of it via
/dev/memby usingPHYS_MASKto determine valid range.
PHYS_MASKcovers 40 bits with LPAE enabled and 32 bits otherwise.Reported-by Vassili Karpov <[email protected]>Signed-off-by Sergey Dyasly <[email protected]>
Acked-by Catalin Marinas <[email protected]>