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

Commit e6bcf562 authored by Hideo Saito's avatar Hideo Saito Committed by Paul Mundt
Browse files

sh: Fix kernel thread stack corruption with preempt.



When I run a preemptive kernel-2.6.20 for SH7780, a created
kthread(pdflush) can not exit by do_exit() in kernel_thread_helper. I
think that the created kthread should have a room for 'struct pt_regs'
space on the stack top, because __switch_to() will refer to the space as
follows using 'regs = task_pt_regs(prev)' and next condition may be true.

Signed-off-by: default avatarHideo Saito <saito@densan.co.jp>
Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent e523d93c
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -250,8 +250,7 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
		childregs->regs[15] = usp;
		ti->addr_limit = USER_DS;
	} else {
		childregs->regs[15] = (unsigned long)task_stack_page(p) +
							THREAD_SIZE;
		childregs->regs[15] = (unsigned long)childregs;
		ti->addr_limit = KERNEL_DS;
	}