lkml.org 
[lkml]   [2011]   [Feb]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[206/272] perf: Validate cpu early in perf_event_alloc()
    2.6.37-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Oleg Nesterov <oleg@redhat.com>

    commit 66832eb4baaaa9abe4c993ddf9113a79e39b9915 upstream.

    Starting from perf_event_alloc()->perf_init_event(), the kernel
    assumes that event->cpu is either -1 or the valid CPU number.

    Change perf_event_alloc() to validate this argument early. This
    also means we can remove the similar check in
    find_get_context().

    Signed-off-by: Oleg Nesterov <oleg@redhat.com>
    Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Alan Stern <stern@rowland.harvard.edu>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Prasad <prasad@linux.vnet.ibm.com>
    Cc: Roland McGrath <roland@redhat.com>
    LKML-Reference: <20110118161032.GC693@redhat.com>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    kernel/perf_event.c | 10 ++++++----
    1 file changed, 6 insertions(+), 4 deletions(-)

    --- a/kernel/perf_event.c
    +++ b/kernel/perf_event.c
    @@ -2105,9 +2105,6 @@ find_get_context(struct pmu *pmu, struct
    if (perf_paranoid_cpu() && !capable(CAP_SYS_ADMIN))
    return ERR_PTR(-EACCES);

    - if (cpu < 0 || cpu >= nr_cpumask_bits)
    - return ERR_PTR(-EINVAL);
    -
    /*
    * We could be clever and allow to attach a event to an
    * offline CPU and activate it when the CPU comes up, but
    @@ -5304,6 +5301,11 @@ perf_event_alloc(struct perf_event_attr
    struct hw_perf_event *hwc;
    long err;

    + if ((unsigned)cpu >= nr_cpu_ids) {
    + if (!task || cpu != -1)
    + return ERR_PTR(-EINVAL);
    + }
    +
    event = kzalloc(sizeof(*event), GFP_KERNEL);
    if (!event)
    return ERR_PTR(-ENOMEM);
    @@ -5352,7 +5354,7 @@ perf_event_alloc(struct perf_event_attr

    if (!overflow_handler && parent_event)
    overflow_handler = parent_event->overflow_handler;
    -
    +
    event->overflow_handler = overflow_handler;

    if (attr->disabled)



    \
     
     \ /
      Last update: 2011-02-16 01:41    [W:4.028 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site