From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Google-Smtp-Source: ACJfBosWuDXsCGOG+uo04wAH5OfEvgAs8195DZMItolJ2yvPTYxN0wBff+2rUDMPOdgFe0LZW9xl ARC-Seal: i=1; a=rsa-sha256; t=1516326946; cv=none; d=google.com; s=arc-20160816; b=eS2cH/gE7afeg2Ekk32LcgIlYh7oGg9zJy5QVevZ95UlLc6cMffWccG6i4ArWHKeCG hxXWo4ugsJxPIz7mmwtQEVON2dt9GnfcVJOuZP03OKZpx0nFSc38iDMFeETc9L7nIMUf 3S2c3KW3CkBIbyv/rNWtBJs3hVQ70MuxpvRbjjo8l7JV1dNnXv2NVFUUxm3cfbWalGhW g+0p2SOhGFCyLI22D6lfYdgCmcOcg/OKLv6goHHBEiGikvDCdVPZnOAUrmNKng/nziFj ORYzRokAe1+MBaIi3Qip2IjhwWjpwJ2mFa4NVDUD7eu7yPJJOk+oqcg89aWPFEFSZDmT AgEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=0OQ6tlAEnJKbM9WRJmrthsg1vW+WaADPFuCYwimzf+Y=; b=DzAJiyttwZjAk7D2/5d36xSSyLL8+dU22HARDMgGDqhJaqN/j8mJ7i50F/vZO0EpSI KR4TE/QKOEokiiqWxjGIaly8Ou7ywLu/zbFFWApqBdX4P+chvsWwgGzZBP2MAtHW/XuI ZgGiKiWqHtzKle6YsZx+oS0oCIeKjA3z0wNw1okg0/SKQOqsAmpnVCNo/mAz0kAl71xW dAhsd/cgF91UD48GATmkiInnL5lZw0dHJJYpMLyLJIF9NsKjYbdydrvcO91aLx4PHKoP WQXcxpKu2e/PKdFSMAQbRj+KRRmzbL479KkT6FdKDoGuDLPsDavfudzFVv/x3eTL+s+7 UURg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=iLc/l9Wd; spf=pass (google.com: best guess record for domain of linux-kselftest-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kselftest-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=iLc/l9Wd; spf=pass (google.com: best guess record for domain of linux-kselftest-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kselftest-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933034AbeASBzo (ORCPT ); Thu, 18 Jan 2018 20:55:44 -0500 Received: from mail-qt0-f195.google.com ([209.85.216.195]:37306 "EHLO mail-qt0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755701AbeASBwd (ORCPT ); Thu, 18 Jan 2018 20:52:33 -0500 From: Ram Pai To: mpe@ellerman.id.au, mingo@redhat.com, akpm@linux-foundation.org, corbet@lwn.net, arnd@arndb.de Cc: linuxppc-dev@lists.ozlabs.org, linux-mm@kvack.org, x86@kernel.org, linux-arch@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, dave.hansen@intel.com, benh@kernel.crashing.org, paulus@samba.org, khandual@linux.vnet.ibm.com, aneesh.kumar@linux.vnet.ibm.com, bsingharora@gmail.com, hbabu@us.ibm.com, mhocko@kernel.org, bauerman@linux.vnet.ibm.com, ebiederm@xmission.com, linuxram@us.ibm.com Subject: [PATCH v10 17/27] powerpc: check key protection for user page access Date: Thu, 18 Jan 2018 17:50:38 -0800 Message-Id: <1516326648-22775-18-git-send-email-linuxram@us.ibm.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1516326648-22775-1-git-send-email-linuxram@us.ibm.com> References: <1516326648-22775-1-git-send-email-linuxram@us.ibm.com> Sender: linux-kselftest-owner@vger.kernel.org X-Mailing-List: linux-kselftest@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: =?utf-8?q?1589984044313861489?= X-GMAIL-MSGID: =?utf-8?q?1589984044313861489?= X-Mailing-List: linux-kernel@vger.kernel.org List-ID: Make sure that the kernel does not access user pages without checking their key-protection. Signed-off-by: Ram Pai --- arch/powerpc/include/asm/book3s/64/pgtable.h | 19 +++++++++++++++++++ 1 files changed, 19 insertions(+), 0 deletions(-) diff --git a/arch/powerpc/include/asm/book3s/64/pgtable.h b/arch/powerpc/include/asm/book3s/64/pgtable.h index e785c68..3d8186e 100644 --- a/arch/powerpc/include/asm/book3s/64/pgtable.h +++ b/arch/powerpc/include/asm/book3s/64/pgtable.h @@ -464,6 +464,25 @@ static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, #ifdef CONFIG_PPC_MEM_KEYS extern bool arch_pte_access_permitted(u64 pte, bool write, bool execute); + +#define pte_access_permitted(pte, write) \ + (pte_present(pte) && \ + ((!(write) || pte_write(pte)) && \ + arch_pte_access_permitted(pte_val(pte), !!write, 0))) + +/* + * We store key in pmd/pud for huge pages. Need to check for key protection. + */ +#define pmd_access_permitted(pmd, write) \ + (pmd_present(pmd) && \ + ((!(write) || pmd_write(pmd)) && \ + arch_pte_access_permitted(pmd_val(pmd), !!write, 0))) + +#define pud_access_permitted(pud, write) \ + (pud_present(pud) && \ + ((!(write) || pud_write(pud)) && \ + arch_pte_access_permitted(pud_val(pud), !!write, 0))) + #endif /* CONFIG_PPC_MEM_KEYS */ #define __HAVE_ARCH_PTEP_GET_AND_CLEAR -- 1.7.1