From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753512AbdCPUAD (ORCPT ); Thu, 16 Mar 2017 16:00:03 -0400 Received: from mail.kernel.org ([198.145.29.136]:44378 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752716AbdCPT76 (ORCPT ); Thu, 16 Mar 2017 15:59:58 -0400 From: Andy Lutomirski To: X86 ML Cc: "linux-kernel@vger.kernel.org" , Borislav Petkov , Vince Weaver , Andy Lutomirski , stable@vger.kernel.org Subject: [PATCH 1/2] x86/perf: Fix CR4.PCE propagation to use active_mm instead of mm Date: Thu, 16 Mar 2017 12:59:39 -0700 Message-Id: <0c5b38a76ea50e405f9abe07a13dfaef87c173a1.1489694270.git.luto@kernel.org> X-Mailer: git-send-email 2.9.3 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If one thread mmaps a perf event while another thread in the same mm is in some context where active_mm != mm (which can happen in the scheduler, for example), refresh_pce() would write the wrong value to CR4.PCE. This broke some PAPI tests. Cc: stable@vger.kernel.org Fixes: 7911d3f7af14 ("perf/x86: Only allow rdpmc if a perf_event is mapped") Reported-and-tested-by: Vince Weaver Signed-off-by: Andy Lutomirski --- arch/x86/events/core.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c index 349d4d17aa7f..4f564df73b8f 100644 --- a/arch/x86/events/core.c +++ b/arch/x86/events/core.c @@ -2101,8 +2101,8 @@ static int x86_pmu_event_init(struct perf_event *event) static void refresh_pce(void *ignored) { - if (current->mm) - load_mm_cr4(current->mm); + if (current->active_mm) + load_mm_cr4(current->active_mm); } static void x86_pmu_event_mapped(struct perf_event *event) -- 2.9.3