[PATCH 2/2] powerpc: FULL_REGS on exec - Kernel

This is a discussion on [PATCH 2/2] powerpc: FULL_REGS on exec - Kernel ; When PTRACE_O_TRACEEXEC is used, a ptrace call to fetch the registers at the PTRACE_EVENT_EXEC stop (PTRACE_PEEKUSR) will oops in CHECK_FULL_REGS. With recent versions, "gdb --args /bin/sh -c 'exec /bin/true'" and "run" at the (gdb) prompt is sufficient to produce this. ...

+ Reply to Thread
Results 1 to 2 of 2

Thread: [PATCH 2/2] powerpc: FULL_REGS on exec

  1. [PATCH 2/2] powerpc: FULL_REGS on exec


    When PTRACE_O_TRACEEXEC is used, a ptrace call to fetch the registers at
    the PTRACE_EVENT_EXEC stop (PTRACE_PEEKUSR) will oops in CHECK_FULL_REGS.
    With recent versions, "gdb --args /bin/sh -c 'exec /bin/true'" and "run" at
    the (gdb) prompt is sufficient to produce this. I also have written an
    isolated test case, see https://bugzilla.redhat.com/show_bug.cgi?id=301791#c15.

    This change fixes the problem by clearing the low bit of pt_regs.trap in
    start_thread so that FULL_REGS is true again. This is correct since all of
    the GPRs that "full" refers to are cleared in start_thread.

    Signed-off-by: Roland McGrath
    ---
    arch/powerpc/kernel/process.c | 7 +++++++
    1 files changed, 7 insertions(+), 0 deletions(-)

    diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
    index e477c9d..fd799d2 100644
    --- a/arch/powerpc/kernel/process.c
    +++ b/arch/powerpc/kernel/process.c
    @@ -605,6 +605,13 @@ void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)
    regs->ccr = 0;
    regs->gpr[1] = sp;

    + /*
    + * We have just cleared all the nonvolatile GPRs, so make
    + * FULL_REGS(regs) return true. This is necessary to allow
    + * ptrace to examine the thread immediately after exec.
    + */
    + regs->trap &= ~1UL;
    +
    #ifdef CONFIG_PPC32
    regs->mq = 0;
    regs->nip = start;
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  2. Re: [PATCH 2/2] powerpc: FULL_REGS on exec


    On Mon, 2007-09-24 at 16:52 -0700, Roland McGrath wrote:
    > When PTRACE_O_TRACEEXEC is used, a ptrace call to fetch the registers at
    > the PTRACE_EVENT_EXEC stop (PTRACE_PEEKUSR) will oops in CHECK_FULL_REGS.
    > With recent versions, "gdb --args /bin/sh -c 'exec /bin/true'" and "run" at
    > the (gdb) prompt is sufficient to produce this. I also have written an
    > isolated test case, see https://bugzilla.redhat.com/show_bug.cgi?id=301791#c15.
    >
    > This change fixes the problem by clearing the low bit of pt_regs.trap in
    > start_thread so that FULL_REGS is true again. This is correct since all of
    > the GPRs that "full" refers to are cleared in start_thread.


    Looks good, nice catch.

    > Signed-off-by: Roland McGrath


    Signed-off-by: Benjamin Herrenschmidt

    > ---
    > arch/powerpc/kernel/process.c | 7 +++++++
    > 1 files changed, 7 insertions(+), 0 deletions(-)
    >
    > diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
    > index e477c9d..fd799d2 100644
    > --- a/arch/powerpc/kernel/process.c
    > +++ b/arch/powerpc/kernel/process.c
    > @@ -605,6 +605,13 @@ void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)
    > regs->ccr = 0;
    > regs->gpr[1] = sp;
    >
    > + /*
    > + * We have just cleared all the nonvolatile GPRs, so make
    > + * FULL_REGS(regs) return true. This is necessary to allow
    > + * ptrace to examine the thread immediately after exec.
    > + */
    > + regs->trap &= ~1UL;
    > +
    > #ifdef CONFIG_PPC32
    > regs->mq = 0;
    > regs->nip = start;
    > _______________________________________________
    > Linuxppc-dev mailing list
    > Linuxppc-dev@ozlabs.org
    > https://ozlabs.org/mailman/listinfo/linuxppc-dev


    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

+ Reply to Thread