Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8a50e513 authored by H. Peter Anvin's avatar H. Peter Anvin
Browse files

x86-32: Use symbolic constants, safer CPUID when enabling EFER.NX



Use symbolic constants rather than hard-coded values when setting
EFER.NX in head_32.S, and do a more rigorous test for the validity of
the response when probing for the extended CPUID range.

Signed-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
LKML-Reference: <1258154897-6770-2-git-send-email-hpa@zytor.com>
Acked-by: default avatarKees Cook <kees.cook@canonical.com>
parent 196cf0d6
Loading
Loading
Loading
Loading
+11 −7
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@
#include <asm/asm-offsets.h>
#include <asm/setup.h>
#include <asm/processor-flags.h>
#include <asm/msr-index.h>
#include <asm/cpufeature.h>
#include <asm/percpu.h>

/* Physical address */
@@ -297,25 +299,27 @@ ENTRY(startup_32_smp)
	orl %edx,%eax
	movl %eax,%cr4

	btl $5, %eax		# check if PAE is enabled
	jnc 6f
	testb $X86_CR4_PAE, %al		# check if PAE is enabled
	jz 6f

	/* Check if extended functions are implemented */
	movl $0x80000000, %eax
	cpuid
	cmpl $0x80000000, %eax
	jbe 6f
	/* Value must be in the range 0x80000001 to 0x8000ffff */
	subl $0x80000001, %eax
	cmpl $(0x8000ffff-0x80000001), %eax
	ja 6f
	mov $0x80000001, %eax
	cpuid
	/* Execute Disable bit supported? */
	btl $20, %edx
	btl $(X86_FEATURE_NX & 31), %edx
	jnc 6f

	/* Setup EFER (Extended Feature Enable Register) */
	movl $0xc0000080, %ecx
	movl $MSR_EFER, %ecx
	rdmsr

	btsl $11, %eax
	btsl $_EFER_NX, %eax
	/* Make changes effective */
	wrmsr