Received: by 10.213.65.68 with SMTP id h4csp179083imn; Tue, 3 Apr 2018 18:17:06 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+PApl05N1W7W/gR+nz86mjdZaxvpwrFL2tCklVC53pNmDKRHnfHz7UIO8ly4XSGre9VjKd X-Received: by 10.101.66.132 with SMTP id j4mr10797057pgp.47.1522804626525; Tue, 03 Apr 2018 18:17:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522804626; cv=none; d=google.com; s=arc-20160816; b=uV0Zx9Erwv0l9X65+4DknqU1GIrkm8gFT+lHnQ19xi/j1GdJT01ZwgOWzLh5hqH860 vFuYrguCRqD38kzajM/swwd6ZXILCqFYQdhZ0HI82RQgOP/7xUPrZb/mWZY1dwkjosWc 3ExeFgggtSo+vEKZHSeVhYBq2sTObistzGzBKkEV5ocXCFXXIDwfCnCUMXLnofRJDgqP eOfOXxObQnJweGV0owON/fAUP0lMaVLc4dQsD3MHQwo9y1wKb03QQ4/4I2rv4181BbLY an+6JGk3RhSWwlfayiPjr4RdSbKQvwQQ71BhGl0NwUSZJrj9oPn1HdJqHxDC/MNzJS0d 5Akg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:in-reply-to:references:date :from:cc:to:subject:arc-authentication-results; bh=LDbv6DWlNvpU4jOTrBb68ZlOszLlMC05D4wZ9eQLzAA=; b=jlP9WSyuRkhsPrDNl9Mfw+yXn6CLwCHhDpMfnmcIbRfefbAzF2HoetWOky2Z7YsdG9 KOHr1y8lrwCJEVpEVauv6n0J917xijQC8OwqXEMvjXENIonIHWMRrhyNyG+Hto5UKW1v YPYiYXNuBV8wsP3HHLZGkt1KToTflkk3FbliHjd7zzH6IythJkVwxLu050ZqrjPnipab 7xlalT/s6XoY2nf/gDWFzupPg5mlbrIgNJxoIcJ2haNA+OwkI2SbUBYNtK0/XZwav/WK Rb0ktvcntf0ZZ8Lk/J6ciRXnNhLLw0eIiUEOffn8AH0GUvHoUBw60KagFEVS0nOe00HL m1aQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u189si3178607pfb.102.2018.04.03.18.16.52; Tue, 03 Apr 2018 18:17:06 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755271AbeDDBOT (ORCPT + 99 others); Tue, 3 Apr 2018 21:14:19 -0400 Received: from mga12.intel.com ([192.55.52.136]:41789 "EHLO mga12.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754920AbeDDBMs (ORCPT ); Tue, 3 Apr 2018 21:12:48 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga106.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 03 Apr 2018 18:12:47 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,403,1517904000"; d="scan'208";a="34053518" Received: from viggo.jf.intel.com (HELO localhost.localdomain) ([10.54.39.119]) by fmsmga002.fm.intel.com with ESMTP; 03 Apr 2018 18:12:47 -0700 Subject: [PATCH 06/11] x86/mm: remove extra filtering in pageattr code To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, Dave Hansen , aarcange@redhat.com, luto@kernel.org, torvalds@linux-foundation.org, keescook@google.com, hughd@google.com, jgross@suse.com, x86@kernel.org, namit@vmware.com From: Dave Hansen Date: Tue, 03 Apr 2018 18:10:02 -0700 References: <20180404010946.6186729B@viggo.jf.intel.com> In-Reply-To: <20180404010946.6186729B@viggo.jf.intel.com> Message-Id: <20180404011002.7112D64B@viggo.jf.intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Dave Hansen The pageattr code has a mode where it can set or clear PTE bits in existing PTEs, so the page protections of the *new* PTEs come from one of two places: 1. The set/clear masks: cpa->mask_clr / cpa->mask_set 2. The existing PTE We filter ->mask_set/clr for supported PTE bits at entry to __change_page_attr() so we never need to filter them again. The only other place permissions can come from is an existing PTE and those already presumably have good bits. We do not need to filter them again. Signed-off-by: Dave Hansen Cc: Andrea Arcangeli Cc: Andy Lutomirski Cc: Linus Torvalds Cc: Kees Cook Cc: Hugh Dickins Cc: Juergen Gross Cc: x86@kernel.org Cc: Nadav Amit --- b/arch/x86/mm/pageattr.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff -puN arch/x86/mm/pageattr.c~x86-pageattr-dont-filter-global arch/x86/mm/pageattr.c --- a/arch/x86/mm/pageattr.c~x86-pageattr-dont-filter-global 2018-04-02 16:41:15.543605172 -0700 +++ b/arch/x86/mm/pageattr.c 2018-04-02 16:41:15.547605172 -0700 @@ -598,7 +598,6 @@ try_preserve_large_page(pte_t *kpte, uns req_prot = pgprot_clear_protnone_bits(req_prot); if (pgprot_val(req_prot) & _PAGE_PRESENT) pgprot_val(req_prot) |= _PAGE_PSE; - req_prot = canon_pgprot(req_prot); /* * old_pfn points to the large page base pfn. So we need @@ -718,7 +717,7 @@ __split_large_page(struct cpa_data *cpa, */ pfn = ref_pfn; for (i = 0; i < PTRS_PER_PTE; i++, pfn += pfninc) - set_pte(&pbase[i], pfn_pte(pfn, canon_pgprot(ref_prot))); + set_pte(&pbase[i], pfn_pte(pfn, ref_prot)); if (virt_addr_valid(address)) { unsigned long pfn = PFN_DOWN(__pa(address)); @@ -935,7 +934,6 @@ static void populate_pte(struct cpa_data pte = pte_offset_kernel(pmd, start); pgprot = pgprot_clear_protnone_bits(pgprot); - pgprot = canon_pgprot(pgprot); while (num_pages-- && start < end) { set_pte(pte, pfn_pte(cpa->pfn, pgprot)); @@ -1234,7 +1232,7 @@ repeat: * after all we're only going to change it's attributes * not the memory it points to */ - new_pte = pfn_pte(pfn, canon_pgprot(new_prot)); + new_pte = pfn_pte(pfn, new_prot); cpa->pfn = pfn; /* * Do we really change anything ? _