Received: by 2002:a4a:311b:0:0:0:0:0 with SMTP id k27-v6csp4804241ooa; Tue, 14 Aug 2018 10:46:48 -0700 (PDT) X-Google-Smtp-Source: AA+uWPw84VacssD4A2svxkS/fT5dZifxBzQCxuysLD8wlZpCkxaIqIhviRZUDhWz10GcX8Zz3V3B X-Received: by 2002:a17:902:6f16:: with SMTP id w22-v6mr2322151plk.127.1534268808149; Tue, 14 Aug 2018 10:46:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1534268808; cv=none; d=google.com; s=arc-20160816; b=VqoXzcZUQIM5GpgnoZ2zH+ybzcNDQ+t3/VmrAhmf8H6xy2XA++q2wNT1xgBR8y8jRZ gtJ+0CRMwajkTM59kX5/LLPfFEJYzIZvnn2LdAL6xaxPivsK+oFelgZrauZzutWK15A/ babiFoi+1chiQEt3SXnDOUfYjGa8KGhri7UYo0N40MZRQXAuZW2YnIqi0B7p5qfsf5Nt Qz4xATDS0PpaGB2DWfzfzW+VCoMx82WepaLUMxguTV7UTUanGGJH5VEyguOj7JIr+yiL PoijIB6SD0AvEjLKsZ5hdrOgdtAdngBwvTENF/pNikwKnnKds8D2nNkPvolNz86hVzM0 uKQw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=XKP5yfFPMVLFSNnbs8ZUvyHUWYd13PF0dlyZybiVrI8=; b=ooG4LVvwZEUGnPmjd7t9cam9glard/wj62eIQMmcytrfVvDEWb+/9eKug7v6YvEfFc 3ck5uyznvZkZAsG5xXx2GYUIgRvUs05vDKZSaKEss+QvbN3+I6BBr45LGR5hVomw6Lx3 vF5F8MKPo9qEzIDk6vqXM1VbUmt3NOY4996kN0Jz4YpI59PnjNXmf7qWs7mCv/DWD2eO yFplyBGstc1CiCBLg91RblRPihtgPXAhqbdjNdKccFYLIM5QXNn00+ZCFsU19HuJVQ2Q WX7cT1/dE36JnTWoSNWHGlzBdri45/xK5NiTuXFY2apkEvjzhiC9oWhQdPqbSrl2K+yE 5WYw== 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 p5-v6si19677302pgl.516.2018.08.14.10.46.33; Tue, 14 Aug 2018 10:46:48 -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 S2390578AbeHNUdM (ORCPT + 99 others); Tue, 14 Aug 2018 16:33:12 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:60150 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390369AbeHNUdL (ORCPT ); Tue, 14 Aug 2018 16:33:11 -0400 Received: from localhost (unknown [194.244.16.108]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 96AFFC9A; Tue, 14 Aug 2018 17:44:59 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Andi Kleen , Thomas Gleixner , David Woodhouse Subject: [PATCH 4.9 103/107] x86/mm/pat: Make set_memory_np() L1TF safe Date: Tue, 14 Aug 2018 19:18:06 +0200 Message-Id: <20180814171526.962135815@linuxfoundation.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180814171520.883143803@linuxfoundation.org> References: <20180814171520.883143803@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.9-stable review patch. If anyone has any objections, please let me know. ------------------ From: Andi Kleen commit 958f79b9ee55dfaf00c8106ed1c22a2919e0028b upstream set_memory_np() is used to mark kernel mappings not present, but it has it's own open coded mechanism which does not have the L1TF protection of inverting the address bits. Replace the open coded PTE manipulation with the L1TF protecting low level PTE routines. Passes the CPA self test. Signed-off-by: Andi Kleen Signed-off-by: Thomas Gleixner [ dwmw2: Pull in pud_mkhuge() from commit a00cc7d9dd, and pfn_pud() ] Signed-off-by: David Woodhouse Signed-off-by: Greg Kroah-Hartman --- arch/x86/include/asm/pgtable.h | 27 +++++++++++++++++++++++++++ arch/x86/mm/pageattr.c | 8 ++++---- 2 files changed, 31 insertions(+), 4 deletions(-) --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h @@ -413,12 +413,39 @@ static inline pmd_t pfn_pmd(unsigned lon return __pmd(pfn | massage_pgprot(pgprot)); } +static inline pud_t pfn_pud(unsigned long page_nr, pgprot_t pgprot) +{ + phys_addr_t pfn = page_nr << PAGE_SHIFT; + pfn ^= protnone_mask(pgprot_val(pgprot)); + pfn &= PHYSICAL_PUD_PAGE_MASK; + return __pud(pfn | massage_pgprot(pgprot)); +} + static inline pmd_t pmd_mknotpresent(pmd_t pmd) { return pfn_pmd(pmd_pfn(pmd), __pgprot(pmd_flags(pmd) & ~(_PAGE_PRESENT|_PAGE_PROTNONE))); } +static inline pud_t pud_set_flags(pud_t pud, pudval_t set) +{ + pudval_t v = native_pud_val(pud); + + return __pud(v | set); +} + +static inline pud_t pud_clear_flags(pud_t pud, pudval_t clear) +{ + pudval_t v = native_pud_val(pud); + + return __pud(v & ~clear); +} + +static inline pud_t pud_mkhuge(pud_t pud) +{ + return pud_set_flags(pud, _PAGE_PSE); +} + static inline u64 flip_protnone_guard(u64 oldval, u64 val, u64 mask); static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) --- a/arch/x86/mm/pageattr.c +++ b/arch/x86/mm/pageattr.c @@ -1001,8 +1001,8 @@ static long populate_pmd(struct cpa_data pmd = pmd_offset(pud, start); - set_pmd(pmd, __pmd(cpa->pfn << PAGE_SHIFT | _PAGE_PSE | - massage_pgprot(pmd_pgprot))); + set_pmd(pmd, pmd_mkhuge(pfn_pmd(cpa->pfn, + canon_pgprot(pmd_pgprot)))); start += PMD_SIZE; cpa->pfn += PMD_SIZE >> PAGE_SHIFT; @@ -1074,8 +1074,8 @@ static long populate_pud(struct cpa_data * Map everything starting from the Gb boundary, possibly with 1G pages */ while (boot_cpu_has(X86_FEATURE_GBPAGES) && end - start >= PUD_SIZE) { - set_pud(pud, __pud(cpa->pfn << PAGE_SHIFT | _PAGE_PSE | - massage_pgprot(pud_pgprot))); + set_pud(pud, pud_mkhuge(pfn_pud(cpa->pfn, + canon_pgprot(pud_pgprot)))); start += PUD_SIZE; cpa->pfn += PUD_SIZE >> PAGE_SHIFT;