[PATCH 2/5] powerpc/tm: Fix 32 bit non-rt signals

Benjamin Herrenschmidt benh at kernel.crashing.org
Sun Jun 9 17:25:45 EST 2013


On Fri, 2013-06-07 at 20:36 +1000, Michael Neuling wrote:
> Currently sys_sigreturn() is TM unaware.  Therefore, if we take a 32 bit signal
> without SIGINFO (non RT) inside a transaction, on signal return we don't
> restore the signal frame correctly.
> 
> This checks if the signal frame being restoring is an active transaction, and
> if so, it copies the additional state to ptregs so it can be restored.
> 
> Signed-off-by: Michael Neuling <mikey at neuling.org>
> ---

 .../...

> +#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
> +	mcp = (struct mcontext __user *)&sf->mctx;
> +	tm_mcp = (struct mcontext __user *)&sf->mctx_transact;
> +	if (__get_user(msr_hi, &tm_mcp->mc_gregs[PT_MSR]))
>  		goto badframe;
> +	if MSR_TM_ACTIVE(msr_hi<<32) {

Mising ( and ). I'll apply that fix locally.

Appart from that, I suppose it's ok. I don't see any exposure
coming from users "cooking" the tm_frame and calling sigreturn,
so as long as we are confident userspace generally only uses
sigreturn with frames it got from an actual signal, and doesn't
try to "generate" frames by hand, we should be ok.

Cheers,
Ben.




More information about the Linuxppc-dev mailing list