diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-10-10 22:23:29 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-10-12 13:35:23 -0400 |
commit | 9fff2fa0db911b0b75ec1f9bec72460c0a676ef5 (patch) | |
tree | 38fd00adc9bde62de1d5f6346dc670e0e599068f /arch/arm/kernel/process.c | |
parent | 22e2430d60dbdfcdd732a086e9ef2dbd74c266d1 (diff) | |
download | op-kernel-dev-9fff2fa0db911b0b75ec1f9bec72460c0a676ef5.zip op-kernel-dev-9fff2fa0db911b0b75ec1f9bec72460c0a676ef5.tar.gz |
arm: switch to saner kernel_execve() semantics
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/arm/kernel/process.c')
-rw-r--r-- | arch/arm/kernel/process.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index c10e439..0f83fa2 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c @@ -373,7 +373,6 @@ void release_thread(struct task_struct *dead_task) } asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); -asmlinkage void ret_from_kernel_thread(void) __asm__("ret_from_kernel_thread"); int copy_thread(unsigned long clone_flags, unsigned long stack_start, @@ -388,13 +387,13 @@ copy_thread(unsigned long clone_flags, unsigned long stack_start, *childregs = *regs; childregs->ARM_r0 = 0; childregs->ARM_sp = stack_start; - thread->cpu_context.pc = (unsigned long)ret_from_fork; } else { + memset(childregs, 0, sizeof(struct pt_regs)); thread->cpu_context.r4 = stk_sz; thread->cpu_context.r5 = stack_start; - thread->cpu_context.pc = (unsigned long)ret_from_kernel_thread; childregs->ARM_cpsr = SVC_MODE; } + thread->cpu_context.pc = (unsigned long)ret_from_fork; thread->cpu_context.sp = (unsigned long)childregs; clear_ptrace_hw_breakpoint(p); |