Re: Kernel oops with 2.6.26, padlock and ipsec: probably problem with fpu state changes

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Herbert Xu <herbert@...>
Cc: Siddha, Suresh B <suresh.b.siddha@...>, H. Peter Anvin <hpa@...>, Wolfgang Walter <wolfgang.walter@...>, netdev@vger.kernel.org <netdev@...>, linux-kernel@vger.kernel.org <linux-kernel@...>, Ingo Molnar <mingo@...>, viro@ZenIV.linux.org.uk <viro@...>, vegard.nossum@gmail.com <vegard.nossum@...>
Date: Saturday, August 9, 2008 - 1:59 pm

On Sat, Aug 09, 2008 at 07:37:27AM -0700, Herbert Xu wrote:

No. Here is the case that can fail on 2.6.25 aswell.

0. CPU's TS flag is set

1. kernel using FPU in some optimized copy  routine and while doing
kernel_fpu_begin() takes an interrupt just before doing clts()

2. Takes an interrupt and ipsec uses padlock instruction. And we
take a DNA fault as TS flag is still set.

3. We handle the DNA fault and set TS_USEDFPU and clear cr0.ts

4. We complete the padlock routine

5. Go back to step-1, which resumes clts() in kernel_fpu_begin(), finishes
the optimized copy routine and does kernel_fpu_end(). At this point,
we have cr0.ts again set to '1' but the task's TS_USEFPU is stilll
set and not cleared.

6. Now kernel resumes its user operation. And at the next context
switch, kernel sees it has do a FP save as TS_USEDFPU is still set
and then will do a unlazy_fpu() in __switch_to(). unlazy_fpu()
will take a DNA fault, as cr0.ts is '1' and now, because we are
in __switch_to(), math_state_restore() will get confused and will
restore the next task's FP state and will save it in prev tasks's FP state.
Remember, in __switch_to() we are already on the stack of the next task
but take a DNA fault for the prev task.

This causes the fpu leakage. We didn't encounter this so far on via
platforms because we don't have any optimized routines that use FP/SSE
in the kernel?

thanks,
suresh
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
Re: Kernel oops with 2.6.26, padlock and ipsec: probably pro..., Suresh Siddha, (Sat Aug 9, 1:59 pm)