From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1947950AbcBRUTt (ORCPT ); Thu, 18 Feb 2016 15:19:49 -0500 Received: from terminus.zytor.com ([198.137.202.10]:46854 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1947919AbcBRUTp (ORCPT ); Thu, 18 Feb 2016 15:19:45 -0500 Date: Thu, 18 Feb 2016 12:18:41 -0800 From: tip-bot for Dave Hansen Message-ID: Cc: mingo@kernel.org, dave.hansen@linux.intel.com, akpm@linux-foundation.org, linux-kernel@vger.kernel.org, riel@redhat.com, tglx@linutronix.de, dvlasenk@redhat.com, peterz@infradead.org, torvalds@linux-foundation.org, bp@alien8.de, brgerst@gmail.com, hpa@zytor.com, dave@sr71.net, luto@amacapital.net Reply-To: dvlasenk@redhat.com, mingo@kernel.org, riel@redhat.com, linux-kernel@vger.kernel.org, tglx@linutronix.de, dave.hansen@linux.intel.com, akpm@linux-foundation.org, hpa@zytor.com, luto@amacapital.net, dave@sr71.net, bp@alien8.de, peterz@infradead.org, torvalds@linux-foundation.org, brgerst@gmail.com In-Reply-To: <20160212210207.DA7B43E6@viggo.jf.intel.com> References: <20160212210207.DA7B43E6@viggo.jf.intel.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:mm/pkeys] x86/mm/pkeys: Add new 'PF_PK' page fault error code bit Git-Commit-ID: b3ecd51559ae7a8f40b10443773b9cd0e6a50f5e 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: b3ecd51559ae7a8f40b10443773b9cd0e6a50f5e Gitweb: http://git.kernel.org/tip/b3ecd51559ae7a8f40b10443773b9cd0e6a50f5e Author: Dave Hansen AuthorDate: Fri, 12 Feb 2016 13:02:07 -0800 Committer: Ingo Molnar CommitDate: Thu, 18 Feb 2016 09:31:50 +0100 x86/mm/pkeys: Add new 'PF_PK' page fault error code bit Note: "PK" is how the Intel SDM refers to this bit, so we also use that nomenclature. This only defines the bit, it does not plumb it anywhere to be handled. Signed-off-by: Dave Hansen Reviewed-by: Thomas Gleixner Cc: Andrew Morton Cc: Andy Lutomirski Cc: Borislav Petkov Cc: Brian Gerst Cc: Dave Hansen Cc: Denys Vlasenko Cc: H. Peter Anvin Cc: Linus Torvalds Cc: Peter Zijlstra Cc: Rik van Riel Cc: linux-mm@kvack.org Link: http://lkml.kernel.org/r/20160212210207.DA7B43E6@viggo.jf.intel.com Signed-off-by: Ingo Molnar --- arch/x86/mm/fault.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index eef44d9..9f72f9c 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c @@ -33,6 +33,7 @@ * bit 2 == 0: kernel-mode access 1: user-mode access * bit 3 == 1: use of reserved bit detected * bit 4 == 1: fault was an instruction fetch + * bit 5 == 1: protection keys block access */ enum x86_pf_error_code { @@ -41,6 +42,7 @@ enum x86_pf_error_code { PF_USER = 1 << 2, PF_RSVD = 1 << 3, PF_INSTR = 1 << 4, + PF_PK = 1 << 5, }; /* @@ -916,6 +918,12 @@ static int spurious_fault_check(unsigned long error_code, pte_t *pte) if ((error_code & PF_INSTR) && !pte_exec(*pte)) return 0; + /* + * Note: We do not do lazy flushing on protection key + * changes, so no spurious fault will ever set PF_PK. + */ + if ((error_code & PF_PK)) + return 1; return 1; }