aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/Kconfig.debug12
-rw-r--r--arch/x86/mm/init_32.c19
-rw-r--r--arch/x86/mm/init_64.c20
3 files changed, 51 insertions, 0 deletions
diff --git a/arch/x86/Kconfig.debug b/arch/x86/Kconfig.debug
index 610aaecc19f8..0c1890c41279 100644
--- a/arch/x86/Kconfig.debug
+++ b/arch/x86/Kconfig.debug
@@ -5,6 +5,18 @@ config TRACE_IRQFLAGS_SUPPORT
5 5
6source "lib/Kconfig.debug" 6source "lib/Kconfig.debug"
7 7
8config NONPROMISC_DEVMEM
9 bool "Disable promiscuous /dev/mem"
10 default y
11 help
12 The /dev/mem file by default only allows userspace access to PCI
13 space and the BIOS code and data regions. This is sufficient for
14 dosemu and X and all common users of /dev/mem. With this config
15 option, you allow userspace access to all of memory, including
16 kernel and userspace memory. Accidental access to this is
17 obviously disasterous, but specific access can be used by people
18 debugging the kernel.
19
8config EARLY_PRINTK 20config EARLY_PRINTK
9 bool "Early printk" if EMBEDDED 21 bool "Early printk" if EMBEDDED
10 default y 22 default y
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
index 9ec62da85fd7..39852d539018 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -227,6 +227,25 @@ static inline int page_kills_ppro(unsigned long pagenr)
227 return 0; 227 return 0;
228} 228}
229 229
230/*
231 * devmem_is_allowed() checks to see if /dev/mem access to a certain address
232 * is valid. The argument is a physical page number.
233 *
234 *
235 * On x86, access has to be given to the first megabyte of ram because that area
236 * contains bios code and data regions used by X and dosemu and similar apps.
237 * Access has to be given to non-kernel-ram areas as well, these contain the PCI
238 * mmio resources as well as potential bios/acpi data regions.
239 */
240int devmem_is_allowed(unsigned long pagenr)
241{
242 if (pagenr <= 256)
243 return 1;
244 if (!page_is_ram(pagenr))
245 return 1;
246 return 0;
247}
248
230#ifdef CONFIG_HIGHMEM 249#ifdef CONFIG_HIGHMEM
231pte_t *kmap_pte; 250pte_t *kmap_pte;
232pgprot_t kmap_prot; 251pgprot_t kmap_prot;
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 1ff7906a9a4d..49c274ee2fba 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -664,6 +664,26 @@ EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid);
664 664
665#endif /* CONFIG_MEMORY_HOTPLUG */ 665#endif /* CONFIG_MEMORY_HOTPLUG */
666 666
667/*
668 * devmem_is_allowed() checks to see if /dev/mem access to a certain address
669 * is valid. The argument is a physical page number.
670 *
671 *
672 * On x86, access has to be given to the first megabyte of ram because that area
673 * contains bios code and data regions used by X and dosemu and similar apps.
674 * Access has to be given to non-kernel-ram areas as well, these contain the PCI
675 * mmio resources as well as potential bios/acpi data regions.
676 */
677int devmem_is_allowed(unsigned long pagenr)
678{
679 if (pagenr <= 256)
680 return 1;
681 if (!page_is_ram(pagenr))
682 return 1;
683 return 0;
684}
685
686
667static struct kcore_list kcore_mem, kcore_vmalloc, kcore_kernel, 687static struct kcore_list kcore_mem, kcore_vmalloc, kcore_kernel,
668 kcore_modules, kcore_vsyscall; 688 kcore_modules, kcore_vsyscall;
669 689