Commit-ID: 1526eee294dd52b70804aa377579682cc4dcd9ad Gitweb: http://git.kernel.org/tip/1526eee294dd52b70804aa377579682cc4dcd9ad Author: Thomas Gleixner <tglx@xxxxxxxxxxxxx> AuthorDate: Mon, 1 May 2017 14:35:45 +0200 Committer: Thomas Gleixner <tglx@xxxxxxxxxxxxx> CommitDate: Mon, 1 May 2017 14:54:40 +0200 perf: Reorder cpu hotplug rwsem against cred_guard_mutex sys_perf_event_open() takes the hotplug rwsem before the cred_guard_mutex. The exit() path has the reverse lock order. The hotplug protection in sys_perf_event_open() is not required before taking the cred_guard_mutex, so it can be reordered there. Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> Cc: Sebastian Siewior <bigeasy@xxxxxxxxxxxxx> Link: http://lkml.kernel.org/r/20170428142456.5xh44ef3fv7w2kkh@xxxxxxxxxxxxx --- kernel/events/core.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/kernel/events/core.c b/kernel/events/core.c index 997123c..71d8c74 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -9742,12 +9742,10 @@ SYSCALL_DEFINE5(perf_event_open, goto err_task; } - get_online_cpus(); - if (task) { err = mutex_lock_interruptible(&task->signal->cred_guard_mutex); if (err) - goto err_cpus; + goto err_task; /* * Reuse ptrace permission checks for now. @@ -9765,11 +9763,13 @@ SYSCALL_DEFINE5(perf_event_open, if (flags & PERF_FLAG_PID_CGROUP) cgroup_fd = pid; + get_online_cpus(); + event = perf_event_alloc(&attr, cpu, task, group_leader, NULL, NULL, NULL, cgroup_fd); if (IS_ERR(event)) { err = PTR_ERR(event); - goto err_cred; + goto err_cpus; } if (is_sampling_event(event)) { @@ -10017,13 +10017,13 @@ SYSCALL_DEFINE5(perf_event_open, perf_event_ctx_unlock(group_leader, gctx); mutex_unlock(&ctx->mutex); + put_online_cpus(); + if (task) { mutex_unlock(&task->signal->cred_guard_mutex); put_task_struct(task); } - put_online_cpus(); - mutex_lock(¤t->perf_event_mutex); list_add_tail(&event->owner_entry, ¤t->perf_event_list); mutex_unlock(¤t->perf_event_mutex); @@ -10054,11 +10054,11 @@ err_alloc: */ if (!event_file) free_event(event); +err_cpus: + put_online_cpus(); err_cred: if (task) mutex_unlock(&task->signal->cred_guard_mutex); -err_cpus: - put_online_cpus(); err_task: if (task) put_task_struct(task); -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |