lkml.org 
[lkml]   [2011]   [Jan]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perf/urgent] perf: Validate cpu early in perf_event_alloc()
    Commit-ID:  66832eb4baaaa9abe4c993ddf9113a79e39b9915
    Gitweb: http://git.kernel.org/tip/66832eb4baaaa9abe4c993ddf9113a79e39b9915
    Author: Oleg Nesterov <oleg@redhat.com>
    AuthorDate: Tue, 18 Jan 2011 17:10:32 +0100
    Committer: Ingo Molnar <mingo@elte.hu>
    CommitDate: Tue, 18 Jan 2011 19:34:23 +0100

    perf: Validate cpu early in perf_event_alloc()

    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>
    Cc: gregkh@suse.de
    Cc: stable@kernel.org
    LKML-Reference: <20110118161032.GC693@redhat.com>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>
    ---
    kernel/perf_event.c | 10 ++++++----
    1 files changed, 6 insertions(+), 4 deletions(-)

    diff --git a/kernel/perf_event.c b/kernel/perf_event.c
    index a962b19..67d9bd7 100644
    --- a/kernel/perf_event.c
    +++ b/kernel/perf_event.c
    @@ -2233,9 +2233,6 @@ find_get_context(struct pmu *pmu, struct task_struct *task, int cpu)
    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
    @@ -5541,6 +5538,11 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
    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);
    @@ -5589,7 +5591,7 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,

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

    if (attr->disabled)

    \
     
     \ /
      Last update: 2011-01-18 20:11    [W:0.028 / U:120.188 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site