1 // SPDX-License-Identifier: GPL-2.0-only
3 * Based on arch/arm/mm/mmap.c
5 * Copyright (C) 2012 ARM Ltd.
9 #include <linux/memblock.h>
10 #include <linux/types.h>
15 * You really shouldn't be using read() or write() on /dev/mem. This might go
18 int valid_phys_addr_range(phys_addr_t addr, size_t size)
21 * Check whether addr is covered by a memory region without the
22 * MEMBLOCK_NOMAP attribute, and whether that region covers the
23 * entire range. In theory, this could lead to false negatives
24 * if the range is covered by distinct but adjacent memory regions
25 * that only differ in other attributes. However, few of such
26 * attributes have been defined, and it is debatable whether it
27 * follows that /dev/mem read() calls should be able traverse
30 return memblock_is_region_memory(addr, size) &&
31 memblock_is_map_memory(addr);
35 * Do not allow /dev/mem mappings beyond the supported physical range.
37 int valid_mmap_phys_addr_range(unsigned long pfn, size_t size)
39 return !(((pfn << PAGE_SHIFT) + size) & ~PHYS_MASK);