diff options
-rw-r--r-- | arch/um/include/common-offsets.h | 2 | ||||
-rw-r--r-- | arch/um/include/os.h | 1 | ||||
-rw-r--r-- | arch/um/kernel/tt/exec_kern.c | 2 | ||||
-rw-r--r-- | arch/um/kernel/tt/process_kern.c | 2 | ||||
-rw-r--r-- | arch/um/kernel/um_arch.c | 2 | ||||
-rw-r--r-- | arch/um/os-Linux/util.c | 23 |
6 files changed, 8 insertions, 24 deletions
diff --git a/arch/um/include/common-offsets.h b/arch/um/include/common-offsets.h index 5593a8027083..541f4a8ca512 100644 --- a/arch/um/include/common-offsets.h +++ b/arch/um/include/common-offsets.h | |||
@@ -28,3 +28,5 @@ DEFINE(UM_NR_CPUS, NR_CPUS); | |||
28 | 28 | ||
29 | /* For crypto assembler code. */ | 29 | /* For crypto assembler code. */ |
30 | DEFINE(crypto_tfm_ctx_offset, offsetof(struct crypto_tfm, __crt_ctx)); | 30 | DEFINE(crypto_tfm_ctx_offset, offsetof(struct crypto_tfm, __crt_ctx)); |
31 | |||
32 | DEFINE(UM_THREAD_SIZE, THREAD_SIZE); | ||
diff --git a/arch/um/include/os.h b/arch/um/include/os.h index 688d181b5f8a..4d9fb26387d5 100644 --- a/arch/um/include/os.h +++ b/arch/um/include/os.h | |||
@@ -272,7 +272,6 @@ extern void do_longjmp(void *p, int val); | |||
272 | 272 | ||
273 | /* util.c */ | 273 | /* util.c */ |
274 | extern void stack_protections(unsigned long address); | 274 | extern void stack_protections(unsigned long address); |
275 | extern void task_protections(unsigned long address); | ||
276 | extern int raw(int fd); | 275 | extern int raw(int fd); |
277 | extern void setup_machinename(char *machine_out); | 276 | extern void setup_machinename(char *machine_out); |
278 | extern void setup_hostinfo(char *buf, int len); | 277 | extern void setup_hostinfo(char *buf, int len); |
diff --git a/arch/um/kernel/tt/exec_kern.c b/arch/um/kernel/tt/exec_kern.c index 98e21743e604..40126cb51801 100644 --- a/arch/um/kernel/tt/exec_kern.c +++ b/arch/um/kernel/tt/exec_kern.c | |||
@@ -57,7 +57,7 @@ void flush_thread_tt(void) | |||
57 | enable_timer(); | 57 | enable_timer(); |
58 | free_page(stack); | 58 | free_page(stack); |
59 | protect_memory(uml_reserved, high_physmem - uml_reserved, 1, 1, 0, 1); | 59 | protect_memory(uml_reserved, high_physmem - uml_reserved, 1, 1, 0, 1); |
60 | task_protections((unsigned long) current_thread); | 60 | stack_protections((unsigned long) current_thread); |
61 | force_flush_all(); | 61 | force_flush_all(); |
62 | unblock_signals(); | 62 | unblock_signals(); |
63 | } | 63 | } |
diff --git a/arch/um/kernel/tt/process_kern.c b/arch/um/kernel/tt/process_kern.c index c631303cb800..74347adf81bf 100644 --- a/arch/um/kernel/tt/process_kern.c +++ b/arch/um/kernel/tt/process_kern.c | |||
@@ -209,7 +209,7 @@ void finish_fork_handler(int sig) | |||
209 | if(current->mm != current->parent->mm) | 209 | if(current->mm != current->parent->mm) |
210 | protect_memory(uml_reserved, high_physmem - uml_reserved, 1, | 210 | protect_memory(uml_reserved, high_physmem - uml_reserved, 1, |
211 | 1, 0, 1); | 211 | 1, 0, 1); |
212 | task_protections((unsigned long) current_thread); | 212 | stack_protections((unsigned long) current_thread); |
213 | 213 | ||
214 | free_page(current->thread.temp_stack); | 214 | free_page(current->thread.temp_stack); |
215 | local_irq_disable(); | 215 | local_irq_disable(); |
diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c index 1cf954a47fd7..ecc458fe51b9 100644 --- a/arch/um/kernel/um_arch.c +++ b/arch/um/kernel/um_arch.c | |||
@@ -459,7 +459,7 @@ int __init linux_main(int argc, char **argv) | |||
459 | 459 | ||
460 | uml_postsetup(); | 460 | uml_postsetup(); |
461 | 461 | ||
462 | task_protections((unsigned long) &init_thread_info); | 462 | stack_protections((unsigned long) &init_thread_info); |
463 | os_flush_stdout(); | 463 | os_flush_stdout(); |
464 | 464 | ||
465 | return CHOOSE_MODE(start_uml_tt(), start_uml_skas()); | 465 | return CHOOSE_MODE(start_uml_tt(), start_uml_skas()); |
diff --git a/arch/um/os-Linux/util.c b/arch/um/os-Linux/util.c index c307a89ed259..7cbcf484e13d 100644 --- a/arch/um/os-Linux/util.c +++ b/arch/um/os-Linux/util.c | |||
@@ -33,25 +33,8 @@ | |||
33 | 33 | ||
34 | void stack_protections(unsigned long address) | 34 | void stack_protections(unsigned long address) |
35 | { | 35 | { |
36 | int prot = PROT_READ | PROT_WRITE | PROT_EXEC; | 36 | if(mprotect((void *) address, UM_THREAD_SIZE, |
37 | 37 | PROT_READ | PROT_WRITE | PROT_EXEC) < 0) | |
38 | if(mprotect((void *) address, UM_KERN_PAGE_SIZE, prot) < 0) | ||
39 | panic("protecting stack failed, errno = %d", errno); | ||
40 | } | ||
41 | |||
42 | void task_protections(unsigned long address) | ||
43 | { | ||
44 | unsigned long guard = address + UM_KERN_PAGE_SIZE; | ||
45 | unsigned long stack = guard + UM_KERN_PAGE_SIZE; | ||
46 | int prot = 0, pages; | ||
47 | |||
48 | #ifdef notdef | ||
49 | if(mprotect((void *) stack, UM_KERN_PAGE_SIZE, prot) < 0) | ||
50 | panic("protecting guard page failed, errno = %d", errno); | ||
51 | #endif | ||
52 | pages = (1 << UML_CONFIG_KERNEL_STACK_ORDER) - 2; | ||
53 | prot = PROT_READ | PROT_WRITE | PROT_EXEC; | ||
54 | if(mprotect((void *) stack, pages * UM_KERN_PAGE_SIZE, prot) < 0) | ||
55 | panic("protecting stack failed, errno = %d", errno); | 38 | panic("protecting stack failed, errno = %d", errno); |
56 | } | 39 | } |
57 | 40 | ||
@@ -72,7 +55,7 @@ int raw(int fd) | |||
72 | 55 | ||
73 | /* XXX tcsetattr could have applied only some changes | 56 | /* XXX tcsetattr could have applied only some changes |
74 | * (and cfmakeraw() is a set of changes) */ | 57 | * (and cfmakeraw() is a set of changes) */ |
75 | return(0); | 58 | return 0; |
76 | } | 59 | } |
77 | 60 | ||
78 | void setup_machinename(char *machine_out) | 61 | void setup_machinename(char *machine_out) |