Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
14c93e8e
Commit
14c93e8e
authored
Sep 23, 2009
by
Ingo Molnar
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'bugfix' of
git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen
into x86/urgent
parents
14c0abf1
c44c9ec0
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
77 additions
and
69 deletions
+77
-69
arch/x86/include/asm/pgtable_types.h
arch/x86/include/asm/pgtable_types.h
+1
-0
arch/x86/mm/Makefile
arch/x86/mm/Makefile
+2
-1
arch/x86/mm/init.c
arch/x86/mm/init.c
+0
-63
arch/x86/mm/setup_nx.c
arch/x86/mm/setup_nx.c
+69
-0
arch/x86/xen/enlighten.c
arch/x86/xen/enlighten.c
+5
-5
No files found.
arch/x86/include/asm/pgtable_types.h
View file @
14c93e8e
...
...
@@ -277,6 +277,7 @@ static inline pteval_t pte_flags(pte_t pte)
typedef
struct
page
*
pgtable_t
;
extern
pteval_t
__supported_pte_mask
;
extern
void
set_nx
(
void
);
extern
int
nx_enabled
;
#define pgprot_writecombine pgprot_writecombine
...
...
arch/x86/mm/Makefile
View file @
14c93e8e
obj-y
:=
init.o init_
$(BITS)
.o fault.o ioremap.o extable.o pageattr.o mmap.o
\
pat.o pgtable.o physaddr.o gup.o
pat.o pgtable.o physaddr.o gup.o
setup_nx.o
# Make sure __phys_addr has no stackprotector
nostackp
:=
$(
call
cc-option,
-fno-stack-protector
)
CFLAGS_physaddr.o
:=
$(nostackp)
CFLAGS_setup_nx.o
:=
$(nostackp)
obj-$(CONFIG_SMP)
+=
tlb.o
...
...
arch/x86/mm/init.c
View file @
14c93e8e
...
...
@@ -28,69 +28,6 @@ int direct_gbpages
#endif
;
int
nx_enabled
;
#if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE)
static
int
disable_nx
__cpuinitdata
;
/*
* noexec = on|off
*
* Control non-executable mappings for processes.
*
* on Enable
* off Disable
*/
static
int
__init
noexec_setup
(
char
*
str
)
{
if
(
!
str
)
return
-
EINVAL
;
if
(
!
strncmp
(
str
,
"on"
,
2
))
{
__supported_pte_mask
|=
_PAGE_NX
;
disable_nx
=
0
;
}
else
if
(
!
strncmp
(
str
,
"off"
,
3
))
{
disable_nx
=
1
;
__supported_pte_mask
&=
~
_PAGE_NX
;
}
return
0
;
}
early_param
(
"noexec"
,
noexec_setup
);
#endif
#ifdef CONFIG_X86_PAE
static
void
__init
set_nx
(
void
)
{
unsigned
int
v
[
4
],
l
,
h
;
if
(
cpu_has_pae
&&
(
cpuid_eax
(
0x80000000
)
>
0x80000001
))
{
cpuid
(
0x80000001
,
&
v
[
0
],
&
v
[
1
],
&
v
[
2
],
&
v
[
3
]);
if
((
v
[
3
]
&
(
1
<<
20
))
&&
!
disable_nx
)
{
rdmsr
(
MSR_EFER
,
l
,
h
);
l
|=
EFER_NX
;
wrmsr
(
MSR_EFER
,
l
,
h
);
nx_enabled
=
1
;
__supported_pte_mask
|=
_PAGE_NX
;
}
}
}
#else
static
inline
void
set_nx
(
void
)
{
}
#endif
#ifdef CONFIG_X86_64
void
__cpuinit
check_efer
(
void
)
{
unsigned
long
efer
;
rdmsrl
(
MSR_EFER
,
efer
);
if
(
!
(
efer
&
EFER_NX
)
||
disable_nx
)
__supported_pte_mask
&=
~
_PAGE_NX
;
}
#endif
static
void
__init
find_early_table_space
(
unsigned
long
end
,
int
use_pse
,
int
use_gbpages
)
{
...
...
arch/x86/mm/setup_nx.c
0 → 100644
View file @
14c93e8e
#include <linux/spinlock.h>
#include <linux/errno.h>
#include <linux/init.h>
#include <asm/pgtable.h>
int
nx_enabled
;
#if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE)
static
int
disable_nx
__cpuinitdata
;
/*
* noexec = on|off
*
* Control non-executable mappings for processes.
*
* on Enable
* off Disable
*/
static
int
__init
noexec_setup
(
char
*
str
)
{
if
(
!
str
)
return
-
EINVAL
;
if
(
!
strncmp
(
str
,
"on"
,
2
))
{
__supported_pte_mask
|=
_PAGE_NX
;
disable_nx
=
0
;
}
else
if
(
!
strncmp
(
str
,
"off"
,
3
))
{
disable_nx
=
1
;
__supported_pte_mask
&=
~
_PAGE_NX
;
}
return
0
;
}
early_param
(
"noexec"
,
noexec_setup
);
#endif
#ifdef CONFIG_X86_PAE
void
__init
set_nx
(
void
)
{
unsigned
int
v
[
4
],
l
,
h
;
if
(
cpu_has_pae
&&
(
cpuid_eax
(
0x80000000
)
>
0x80000001
))
{
cpuid
(
0x80000001
,
&
v
[
0
],
&
v
[
1
],
&
v
[
2
],
&
v
[
3
]);
if
((
v
[
3
]
&
(
1
<<
20
))
&&
!
disable_nx
)
{
rdmsr
(
MSR_EFER
,
l
,
h
);
l
|=
EFER_NX
;
wrmsr
(
MSR_EFER
,
l
,
h
);
nx_enabled
=
1
;
__supported_pte_mask
|=
_PAGE_NX
;
}
}
}
#else
void
set_nx
(
void
)
{
}
#endif
#ifdef CONFIG_X86_64
void
__cpuinit
check_efer
(
void
)
{
unsigned
long
efer
;
rdmsrl
(
MSR_EFER
,
efer
);
if
(
!
(
efer
&
EFER_NX
)
||
disable_nx
)
__supported_pte_mask
&=
~
_PAGE_NX
;
}
#endif
arch/x86/xen/enlighten.c
View file @
14c93e8e
...
...
@@ -1082,6 +1082,11 @@ asmlinkage void __init xen_start_kernel(void)
__supported_pte_mask
|=
_PAGE_IOMAP
;
#ifdef CONFIG_X86_64
/* Work out if we support NX */
check_efer
();
#endif
xen_setup_features
();
/* Get mfn list */
...
...
@@ -1123,11 +1128,6 @@ asmlinkage void __init xen_start_kernel(void)
pgd
=
(
pgd_t
*
)
xen_start_info
->
pt_base
;
#ifdef CONFIG_X86_64
/* Work out if we support NX */
check_efer
();
#endif
/* Don't do the full vcpu_info placement stuff until we have a
possible map and a non-dummy shared_info. */
per_cpu
(
xen_vcpu
,
0
)
=
&
HYPERVISOR_shared_info
->
vcpu_info
[
0
];
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment