On Thu, Nov 29, 2018 at 8:33 AM Josh Poimboeuf <jpoim...@redhat.com> wrote:
>
> This seems to work...
>
> +       .if \create_gap == 1
> +       .rept 6
> +       pushq 5*8(%rsp)
> +       .endr
> +       .endif
> +
> -idtentry int3                  do_int3                 has_error_code=0
> +idtentry int3                  do_int3                 has_error_code=0      
>   create_gap=1

Ugh. Doesn't this entirely screw up the stack layout, which then
screws up  task_pt_regs(), which then breaks ptrace and friends?

... and you'd only notice it for users that use int3 in user space,
which now writes random locations on the kernel stack, which is then a
huge honking security hole.

It's possible that I'm confused, but let's not play random games with
the stack like this. The entry code is sacred, in scary ways.

So no. Do *not* try to change %rsp on the stack in the bp handler.
Instead, I'd suggest:

 - just restart the instruction (with the suggested "ptregs->rip --")

 - to avoid any "oh, we're not making progress" issues, just fix the
instruction yourself to be the right call, by looking it up in the
"what needs to be fixed" tables.

No?

              Linus

Reply via email to