lkml.org 
[lkml]   [2010]   [Feb]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/2] hw-breakpoints: Accept breakpoints on NULL address
    Date
    Before we had a generic breakpoint API, ptrace was accepting
    breakpoints on NULL address in x86. The new API refuse them,
    without given strong reasons. We need to follow the previous
    behaviour as some userspace apps like Wine need such NULL
    breakpoints to ensure old emulated software protections
    are still working.

    This fixes a 2.6.32 - 2.6.33-x ptrace regression.

    Reported-by: Michael Stefaniuc <mstefani@redhat.com>
    Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: K.Prasad <prasad@linux.vnet.ibm.com>
    Cc: Alan Stern <stern@rowland.harvard.edu>
    Cc: Maneesh Soni <maneesh@linux.vnet.ibm.com>
    Cc: Alexandre Julliard <julliard@winehq.org>
    Cc: Rafael J. Wysocki <rjw@sisk.pl>
    Cc: Maciej Rutecki <maciej.rutecki@gmail.com>
    ---
    arch/x86/kernel/hw_breakpoint.c | 30 +++++++-----------------------
    1 files changed, 7 insertions(+), 23 deletions(-)

    diff --git a/arch/x86/kernel/hw_breakpoint.c b/arch/x86/kernel/hw_breakpoint.c
    index 05d5fec..bb6006e 100644
    --- a/arch/x86/kernel/hw_breakpoint.c
    +++ b/arch/x86/kernel/hw_breakpoint.c
    @@ -212,25 +212,6 @@ static int arch_check_va_in_kernelspace(unsigned long va, u8 hbp_len)
    return (va >= TASK_SIZE) && ((va + len - 1) >= TASK_SIZE);
    }

    -/*
    - * Store a breakpoint's encoded address, length, and type.
    - */
    -static int arch_store_info(struct perf_event *bp)
    -{
    - struct arch_hw_breakpoint *info = counter_arch_bp(bp);
    - /*
    - * For kernel-addresses, either the address or symbol name can be
    - * specified.
    - */
    - if (info->name)
    - info->address = (unsigned long)
    - kallsyms_lookup_name(info->name);
    - if (info->address)
    - return 0;
    -
    - return -EINVAL;
    -}
    -
    int arch_bp_generic_fields(int x86_len, int x86_type,
    int *gen_len, int *gen_type)
    {
    @@ -362,10 +343,13 @@ int arch_validate_hwbkpt_settings(struct perf_event *bp,
    return ret;
    }

    - ret = arch_store_info(bp);
    -
    - if (ret < 0)
    - return ret;
    + /*
    + * For kernel-addresses, either the address or symbol name can be
    + * specified.
    + */
    + if (info->name)
    + info->address = (unsigned long)
    + kallsyms_lookup_name(info->name);
    /*
    * Check that the low-order bits of the address are appropriate
    * for the alignment implied by len.
    --
    1.6.2.3


    \
     
     \ /
      Last update: 2010-02-18 19:03    [W:0.045 / U:32.488 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site