On 03/17/2015 02:42 PM, Denys Vlasenko wrote: > Without this change, it is still not possible to get rid of > PER_CPU_VAR(old_rsp) usage in switch_to: if preemption happens > while we did not fetch PER_CPU_VAR(old_rsp) and stored it in pt_regs->sp, > PER_CPU_VAR(old_rsp) gets corrupted by other task's user sp. > > Signed-off-by: Denys Vlasenko <[email protected]> > CC: Linus Torvalds <[email protected]> > CC: Steven Rostedt <[email protected]> > CC: Ingo Molnar <[email protected]> > CC: Borislav Petkov <[email protected]> > CC: "H. Peter Anvin" <[email protected]> > CC: Andy Lutomirski <[email protected]> > CC: Oleg Nesterov <[email protected]> > CC: Frederic Weisbecker <[email protected]> > CC: Alexei Starovoitov <[email protected]> > CC: Will Drewry <[email protected]> > CC: Kees Cook <[email protected]> > CC: [email protected] > CC: [email protected] > --- > > Run-tested, including with PARAVIRT on.
Well. The testing with PARAVIRT did work, however, I don't know why. > movq_cfi rax,ORIG_RAX > + /* > + * No need to follow this irqs off/on section - it's straight > + * and short: > + */ > + ENABLE_INTERRUPTS(CLBR_RAX) Here I wrongly assumed that now I can clobber rax, since it is saved in pt_regs->orig_ax now. Wrong. Code below still wants to use rax register directly. Looks like I was "lucky" and paravirt call happen to not change rax. I'll send a v2 patch without this ill-advised attempt of optimization. Sorry. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

