On Fri, Jan 11, 2019 at 11:03:30AM -0800, Linus Torvalds wrote:
> The we'd change the end of poke_int3_handler() to do something like
> this instead:
> 
>         void *newip = bp_int3_handler;
>         ..
>         if (new == magic_static_call_bp_int3_handler) {
>                 if (regs->flags &X86_FLAGS_IF) {
>                         newip = magic_static_call_bp_int3_handler_sti;
>                         regs->flags &= ~X86_FLAGS_IF;
>         }
>         regs->ip = (unsigned long) newip;
>         return 1;
> 
> AAND now we're *really* done.
> 
> Does anybody see any issues in this?

This sounds ok, with a possible tweak: instead of the sti tricks,
couldn't we just use synchronize_rcu_tasks() (as Jason suggested), to
make sure the stubs are no longer used by a preempted task?

But really, to me, having to create and manage all those custom
trampolines still feels a lot more complex than just making a gap on the
stack.

-- 
Josh

Reply via email to