Skip to content

Commit

Permalink
uml: stop specially protecting kernel stacks
Browse files Browse the repository at this point in the history
Map all of physical memory as executable to avoid having to change stack
protections during fork and exit.

unprotect_stack is now called only from MODE_TT code, so it is marked as such.

Signed-off-by: Jeff Dike <jdike@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Jeff Dike authored and Linus Torvalds committed Oct 16, 2007
1 parent 8d82076 commit 5c8aace
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 4 deletions.
2 changes: 2 additions & 0 deletions arch/um/include/kern_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,9 @@ extern void check_stack_overflow(void *ptr);
extern void relay_signal(int sig, union uml_pt_regs *regs);
extern int user_context(unsigned long sp);
extern void timer_irq(union uml_pt_regs *regs);
#ifdef CONFIG_MODE_TT
extern void unprotect_stack(unsigned long stack);
#endif
extern void do_uml_exitcalls(void);
extern int attach_debugger(int idle_pid, int pid, int stop);
extern int config_gdb(char *str);
Expand Down
2 changes: 2 additions & 0 deletions arch/um/kernel/init_task.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,9 @@ union thread_union cpu0_irqstack
__attribute__((__section__(".data.init_irqstack"))) =
{ INIT_THREAD_INFO(init_task) };

#ifdef CONFIG_MODE_TT
void unprotect_stack(unsigned long stack)
{
os_protect_memory((void *) stack, THREAD_SIZE, 1, 1, 0);
}
#endif
2 changes: 1 addition & 1 deletion arch/um/kernel/physmem.c
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ void __init setup_physmem(unsigned long start, unsigned long reserve_end,

offset = uml_reserved - uml_physmem;
err = os_map_memory((void *) uml_reserved, physmem_fd, offset,
len - offset, 1, 1, 0);
len - offset, 1, 1, 1);
if(err < 0){
os_print_error(err, "Mapping memory");
exit(1);
Expand Down
5 changes: 2 additions & 3 deletions arch/um/kernel/process.c
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,9 @@ unsigned long alloc_stack(int order, int atomic)
if (atomic)
flags = GFP_ATOMIC;
page = __get_free_pages(flags, order);
if(page == 0)
if (page == 0)
return 0;
stack_protections(page);

return page;
}

Expand Down Expand Up @@ -141,7 +141,6 @@ void release_thread(struct task_struct *task)

void exit_thread(void)
{
unprotect_stack((unsigned long) current_thread);
}

void *get_current(void)
Expand Down

0 comments on commit 5c8aace

Please sign in to comment.