lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 15 Sep 2010 10:03:29 GMT From: tip-bot for Matt Helsley <matthltc@...ibm.com> To: linux-tip-commits@...r.kernel.org Cc: linux-kernel@...r.kernel.org, acme@...hat.com, hpa@...or.com, mingo@...hat.com, will.deacon@....com, a.p.zijlstra@...llo.nl, matthltc@...ibm.com, mahesh@...ux.vnet.ibm.com, rostedt@...dmis.org, tglx@...utronix.de, mingo@...e.hu, greenrd@...enrd.org, prasad@...ux.vnet.ibm.com Subject: [tip:perf/core] perf events: Split out task search into helper Commit-ID: 2ebd4ffb6d0cb877787b1e42be8485820158857e Gitweb: http://git.kernel.org/tip/2ebd4ffb6d0cb877787b1e42be8485820158857e Author: Matt Helsley <matthltc@...ibm.com> AuthorDate: Mon, 13 Sep 2010 13:01:19 -0700 Committer: Ingo Molnar <mingo@...e.hu> CommitDate: Wed, 15 Sep 2010 10:44:00 +0200 perf events: Split out task search into helper Split out the code which searches for non-exiting tasks into its own helper. Creating this helper not only makes the code slightly more readable it prepares to move the search out of find_get_context() in a subsequent commit. Signed-off-by: Matt Helsley <matthltc@...ibm.com> Signed-off-by: Peter Zijlstra <a.p.zijlstra@...llo.nl> Cc: Robin Green <greenrd@...enrd.org> Cc: Prasad <prasad@...ux.vnet.ibm.com> Cc: Arnaldo Carvalho de Melo <acme@...hat.com> Cc: Steven Rostedt <rostedt@...dmis.org> Cc: Will Deacon <will.deacon@....com> Cc: Mahesh Salgaonkar <mahesh@...ux.vnet.ibm.com> LKML-Reference: <561205417b450b8a4bf7488374541d64b4690431.1284407762.git.matthltc@...ibm.com> Signed-off-by: Ingo Molnar <mingo@...e.hu> --- kernel/perf_event.c | 63 ++++++++++++++++++++++++++++++++------------------ 1 files changed, 40 insertions(+), 23 deletions(-) diff --git a/kernel/perf_event.c b/kernel/perf_event.c index 440f9ca..3f5309d 100644 --- a/kernel/perf_event.c +++ b/kernel/perf_event.c @@ -2015,6 +2015,43 @@ alloc_perf_context(struct pmu *pmu, struct task_struct *task) return ctx; } +static struct task_struct * +find_lively_task_by_vpid(pid_t vpid) +{ + struct task_struct *task; + int err; + + rcu_read_lock(); + if (!vpid) + task = current; + else + task = find_task_by_vpid(vpid); + if (task) + get_task_struct(task); + rcu_read_unlock(); + + if (!task) + return ERR_PTR(-ESRCH); + + /* + * Can't attach events to a dying task. + */ + err = -ESRCH; + if (task->flags & PF_EXITING) + goto errout; + + /* Reuse ptrace permission checks for now. */ + err = -EACCES; + if (!ptrace_may_access(task, PTRACE_MODE_READ)) + goto errout; + + return task; +errout: + put_task_struct(task); + return ERR_PTR(err); + +} + static struct perf_event_context * find_get_context(struct pmu *pmu, pid_t pid, int cpu) { @@ -2047,29 +2084,9 @@ find_get_context(struct pmu *pmu, pid_t pid, int cpu) return ctx; } - rcu_read_lock(); - if (!pid) - task = current; - else - task = find_task_by_vpid(pid); - if (task) - get_task_struct(task); - rcu_read_unlock(); - - if (!task) - return ERR_PTR(-ESRCH); - - /* - * Can't attach events to a dying task. - */ - err = -ESRCH; - if (task->flags & PF_EXITING) - goto errout; - - /* Reuse ptrace permission checks for now. */ - err = -EACCES; - if (!ptrace_may_access(task, PTRACE_MODE_READ)) - goto errout; + task = find_lively_task_by_vpid(pid); + if (IS_ERR(task)) + return (void*)task; err = -EINVAL; ctxn = pmu->task_ctx_nr; -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists