diff options
-rw-r--r-- | arch/x86/include/asm/proto.h | 1 | ||||
-rw-r--r-- | arch/x86/kernel/setup.c | 11 | ||||
-rw-r--r-- | arch/x86/mm/init.c | 4 | ||||
-rw-r--r-- | arch/x86/mm/setup_nx.c | 22 |
4 files changed, 29 insertions, 9 deletions
diff --git a/arch/x86/include/asm/proto.h b/arch/x86/include/asm/proto.h index add7f18f17a7..450c56bcd4f8 100644 --- a/arch/x86/include/asm/proto.h +++ b/arch/x86/include/asm/proto.h | |||
@@ -17,6 +17,7 @@ extern void ia32_sysenter_target(void); | |||
17 | extern void syscall32_cpu_init(void); | 17 | extern void syscall32_cpu_init(void); |
18 | 18 | ||
19 | extern void x86_configure_nx(void); | 19 | extern void x86_configure_nx(void); |
20 | extern void x86_report_nx(void); | ||
20 | 21 | ||
21 | extern int reboot_force; | 22 | extern int reboot_force; |
22 | 23 | ||
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index 23b7f46bf843..d2043a00abc1 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c | |||
@@ -788,16 +788,17 @@ void __init setup_arch(char **cmdline_p) | |||
788 | *cmdline_p = command_line; | 788 | *cmdline_p = command_line; |
789 | 789 | ||
790 | /* | 790 | /* |
791 | * Must call this twice: Once just to detect whether hardware doesn't | 791 | * x86_configure_nx() is called before parse_early_param() to detect |
792 | * support NX (so that the early EHCI debug console setup can safely | 792 | * whether hardware doesn't support NX (so that the early EHCI debug |
793 | * call set_fixmap(), and then again after parsing early parameters to | 793 | * console setup can safely call set_fixmap()). It may then be called |
794 | * honor the respective command line option. | 794 | * again from within noexec_setup() during parsing early parameters |
795 | * to honor the respective command line option. | ||
795 | */ | 796 | */ |
796 | x86_configure_nx(); | 797 | x86_configure_nx(); |
797 | 798 | ||
798 | parse_early_param(); | 799 | parse_early_param(); |
799 | 800 | ||
800 | x86_configure_nx(); | 801 | x86_report_nx(); |
801 | 802 | ||
802 | /* Must be before kernel pagetables are setup */ | 803 | /* Must be before kernel pagetables are setup */ |
803 | vmi_activate(); | 804 | vmi_activate(); |
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c index 27ec2c23fd47..d406c5239019 100644 --- a/arch/x86/mm/init.c +++ b/arch/x86/mm/init.c | |||
@@ -146,10 +146,6 @@ unsigned long __init_refok init_memory_mapping(unsigned long start, | |||
146 | use_gbpages = direct_gbpages; | 146 | use_gbpages = direct_gbpages; |
147 | #endif | 147 | #endif |
148 | 148 | ||
149 | /* XXX: replace this with Kees' improved messages */ | ||
150 | if (__supported_pte_mask & _PAGE_NX) | ||
151 | printk(KERN_INFO "NX (Execute Disable) protection: active\n"); | ||
152 | |||
153 | /* Enable PSE if available */ | 149 | /* Enable PSE if available */ |
154 | if (cpu_has_pse) | 150 | if (cpu_has_pse) |
155 | set_in_cr4(X86_CR4_PSE); | 151 | set_in_cr4(X86_CR4_PSE); |
diff --git a/arch/x86/mm/setup_nx.c b/arch/x86/mm/setup_nx.c index 355818b087b5..a3250aa34086 100644 --- a/arch/x86/mm/setup_nx.c +++ b/arch/x86/mm/setup_nx.c | |||
@@ -36,3 +36,25 @@ void __cpuinit x86_configure_nx(void) | |||
36 | else | 36 | else |
37 | __supported_pte_mask &= ~_PAGE_NX; | 37 | __supported_pte_mask &= ~_PAGE_NX; |
38 | } | 38 | } |
39 | |||
40 | void __init x86_report_nx(void) | ||
41 | { | ||
42 | if (!cpu_has_nx) { | ||
43 | printk(KERN_NOTICE "Notice: NX (Execute Disable) protection " | ||
44 | "missing in CPU or disabled in BIOS!\n"); | ||
45 | } else { | ||
46 | #if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE) | ||
47 | if (disable_nx) { | ||
48 | printk(KERN_INFO "NX (Execute Disable) protection: " | ||
49 | "disabled by kernel command line option\n"); | ||
50 | } else { | ||
51 | printk(KERN_INFO "NX (Execute Disable) protection: " | ||
52 | "active\n"); | ||
53 | } | ||
54 | #else | ||
55 | /* 32bit non-PAE kernel, NX cannot be used */ | ||
56 | printk(KERN_NOTICE "Notice: NX (Execute Disable) protection " | ||
57 | "cannot be enabled: non-PAE kernel!\n"); | ||
58 | #endif | ||
59 | } | ||
60 | } | ||