lkml.org 
[lkml]   [2010]   [Sep]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 08/24] ptrace: cleanup arch_ptrace() on cris
    Date
    Use new 'regno' variable in order to remove redandunt expression and
    remove checking @addr less than 0 because @addr is now unsigned.
    Also update 'datap' on PTRACE_GET/SETREGS to fix a bug on arch-v10.

    Signed-off-by: Namhyung Kim <namhyung@gmail.com>
    Cc: Mikael Starvik <starvik@axis.com>
    Cc: Jesper Nilsson <jesper.nilsson@axis.com>
    ---
    arch/cris/arch-v10/kernel/ptrace.c | 17 ++++++++---------
    arch/cris/arch-v32/kernel/ptrace.c | 13 ++++++-------
    2 files changed, 14 insertions(+), 16 deletions(-)

    diff --git a/arch/cris/arch-v10/kernel/ptrace.c b/arch/cris/arch-v10/kernel/ptrace.c
    index d411e02..320065f 100644
    --- a/arch/cris/arch-v10/kernel/ptrace.c
    +++ b/arch/cris/arch-v10/kernel/ptrace.c
    @@ -80,6 +80,7 @@ long arch_ptrace(struct task_struct *child, long request,
    unsigned long addr, unsigned long data)
    {
    int ret;
    + unsigned int regno = addr >> 2;
    unsigned long __user *datap = (unsigned long __user *)data;

    switch (request) {
    @@ -94,10 +95,10 @@ long arch_ptrace(struct task_struct *child, long request,
    unsigned long tmp;

    ret = -EIO;
    - if ((addr & 3) || addr < 0 || addr > PT_MAX << 2)
    + if ((addr & 3) || regno > PT_MAX)
    break;

    - tmp = get_reg(child, addr >> 2);
    + tmp = get_reg(child, regno);
    ret = put_user(tmp, datap);
    break;
    }
    @@ -111,19 +112,17 @@ long arch_ptrace(struct task_struct *child, long request,
    /* Write the word at location address in the USER area. */
    case PTRACE_POKEUSR:
    ret = -EIO;
    - if ((addr & 3) || addr < 0 || addr > PT_MAX << 2)
    + if ((addr & 3) || regno > PT_MAX)
    break;

    - addr >>= 2;
    -
    - if (addr == PT_DCCR) {
    + if (regno == PT_DCCR) {
    /* don't allow the tracing process to change stuff like
    * interrupt enable, kernel/user bit, dma enables etc.
    */
    data &= DCCR_MASK;
    data |= get_reg(child, PT_DCCR) & ~DCCR_MASK;
    }
    - if (put_reg(child, addr, data))
    + if (put_reg(child, regno, data))
    break;
    ret = 0;
    break;
    @@ -142,7 +141,7 @@ long arch_ptrace(struct task_struct *child, long request,
    break;
    }

    - data += sizeof(unsigned long);
    + datap++;
    }

    break;
    @@ -166,7 +165,7 @@ long arch_ptrace(struct task_struct *child, long request,
    }

    put_reg(child, i, tmp);
    - data += sizeof(unsigned long);
    + datap++;
    }

    break;
    diff --git a/arch/cris/arch-v32/kernel/ptrace.c b/arch/cris/arch-v32/kernel/ptrace.c
    index 3e058a1..511ece9 100644
    --- a/arch/cris/arch-v32/kernel/ptrace.c
    +++ b/arch/cris/arch-v32/kernel/ptrace.c
    @@ -130,6 +130,7 @@ long arch_ptrace(struct task_struct *child, long request,
    unsigned long addr, unsigned long data)
    {
    int ret;
    + unsigned int regno = addr >> 2;
    unsigned long __user *datap = (unsigned long __user *)data;

    switch (request) {
    @@ -164,10 +165,10 @@ long arch_ptrace(struct task_struct *child, long request,
    unsigned long tmp;

    ret = -EIO;
    - if ((addr & 3) || addr < 0 || addr > PT_MAX << 2)
    + if ((addr & 3) || regno > PT_MAX)
    break;

    - tmp = get_reg(child, addr >> 2);
    + tmp = get_reg(child, regno);
    ret = put_user(tmp, datap);
    break;
    }
    @@ -181,19 +182,17 @@ long arch_ptrace(struct task_struct *child, long request,
    /* Write the word at location address in the USER area. */
    case PTRACE_POKEUSR:
    ret = -EIO;
    - if ((addr & 3) || addr < 0 || addr > PT_MAX << 2)
    + if ((addr & 3) || regno > PT_MAX)
    break;

    - addr >>= 2;
    -
    - if (addr == PT_CCS) {
    + if (regno == PT_CCS) {
    /* don't allow the tracing process to change stuff like
    * interrupt enable, kernel/user bit, dma enables etc.
    */
    data &= CCS_MASK;
    data |= get_reg(child, PT_CCS) & ~CCS_MASK;
    }
    - if (put_reg(child, addr, data))
    + if (put_reg(child, regno, data))
    break;
    ret = 0;
    break;
    --
    1.7.2.2


    \
     
     \ /
      Last update: 2010-09-02 17:51    [W:3.311 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site