From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1949859AbdEANAk (ORCPT ); Mon, 1 May 2017 09:00:40 -0400 Received: from terminus.zytor.com ([65.50.211.136]:37729 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751992AbdEANAa (ORCPT ); Mon, 1 May 2017 09:00:30 -0400 Date: Mon, 1 May 2017 05:57:53 -0700 From: tip-bot for Thomas Gleixner Message-ID: Cc: linux-kernel@vger.kernel.org, peterz@infradead.org, hpa@zytor.com, tglx@linutronix.de, mingo@kernel.org, bigeasy@linutronix.de Reply-To: linux-kernel@vger.kernel.org, bigeasy@linutronix.de, hpa@zytor.com, peterz@infradead.org, mingo@kernel.org, tglx@linutronix.de In-Reply-To: <20170428142456.5xh44ef3fv7w2kkh@linutronix.de> References: <20170428142456.5xh44ef3fv7w2kkh@linutronix.de> To: linux-tip-commits@vger.kernel.org Subject: [tip:smp/hotplug] perf: Reorder cpu hotplug rwsem against cred_guard_mutex Git-Commit-ID: 1526eee294dd52b70804aa377579682cc4dcd9ad X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 1526eee294dd52b70804aa377579682cc4dcd9ad Gitweb: http://git.kernel.org/tip/1526eee294dd52b70804aa377579682cc4dcd9ad Author: Thomas Gleixner AuthorDate: Mon, 1 May 2017 14:35:45 +0200 Committer: Thomas Gleixner 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 Cc: Peter Zijlstra Cc: Sebastian Siewior Link: http://lkml.kernel.org/r/20170428142456.5xh44ef3fv7w2kkh@linutronix.de --- 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);