Message ID | 1342465608-20596-1-git-send-email-stuart.yoder@freescale.com (mailing list archive) |
---|---|
State | Accepted, archived |
Commit | 1f8b0bc81ac283adcda68805e0e2f5108614db44 |
Delegated to: | Benjamin Herrenschmidt |
Headers | show |
On Jul 16, 2012, at 2:06 PM, Stuart Yoder wrote: > From: Stuart Yoder <stuart.yoder@freescale.com> > > without setting the stack limit like this there is the possibility > of stack overflow which corrupts the thread info but > is not detected by stack overflow detection > > Signed-off-by: Stuart Yoder <stuart.yoder@freescale.com> > --- > arch/powerpc/kernel/entry_32.S | 12 ++++++++++-- > 1 files changed, 10 insertions(+), 2 deletions(-) Do we need this for debug & mcheck ? - k
> -----Original Message----- > From: Kumar Gala [mailto:galak@kernel.crashing.org] > Sent: Monday, July 16, 2012 3:36 PM > To: Yoder Stuart-B08248 > Cc: benh@kernel.crashing.org; sfr@canb.auug.org.au; paulus@samba.org; linuxppc-dev@lists.ozlabs.org; > agraf@suse.de > Subject: Re: [PATCH] powerpc: set stack limit properly in crit_transfer_to_handler > > > On Jul 16, 2012, at 2:06 PM, Stuart Yoder wrote: > > > From: Stuart Yoder <stuart.yoder@freescale.com> > > > > without setting the stack limit like this there is the possibility > > of stack overflow which corrupts the thread info but > > is not detected by stack overflow detection > > > > Signed-off-by: Stuart Yoder <stuart.yoder@freescale.com> > > --- > > arch/powerpc/kernel/entry_32.S | 12 ++++++++++-- > > 1 files changed, 10 insertions(+), 2 deletions(-) > > Do we need this for debug & mcheck ? Maybe... I don't know the history of this code and why this is only done in the critical exception handlers. But, this particular patch is to undo/fix something I introduced in: powerpc: Use CURRENT_THREAD_INFO instead of open coded assembly Stuart
diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S index 5207d5a..ead5016 100644 --- a/arch/powerpc/kernel/entry_32.S +++ b/arch/powerpc/kernel/entry_32.S @@ -89,10 +89,14 @@ crit_transfer_to_handler: mfspr r0,SPRN_SRR1 stw r0,_SRR1(r11) + /* set the stack limit to the current stack + * and set the limit to protect the thread_info + * struct + */ mfspr r8,SPRN_SPRG_THREAD lwz r0,KSP_LIMIT(r8) stw r0,SAVED_KSP_LIMIT(r11) - CURRENT_THREAD_INFO(r0, r1) + rlwimi r0,r1,0,0,(31-THREAD_SHIFT) stw r0,KSP_LIMIT(r8) /* fall through */ #endif @@ -109,10 +113,14 @@ crit_transfer_to_handler: mfspr r0,SPRN_SRR1 stw r0,crit_srr1@l(0) + /* set the stack limit to the current stack + * and set the limit to protect the thread_info + * struct + */ mfspr r8,SPRN_SPRG_THREAD lwz r0,KSP_LIMIT(r8) stw r0,saved_ksp_limit@l(0) - CURRENT_THREAD_INFO(r0, r1) + rlwimi r0,r1,0,0,(31-THREAD_SHIFT) stw r0,KSP_LIMIT(r8) /* fall through */ #endif