Received: by 2002:a4a:311b:0:0:0:0:0 with SMTP id k27-v6csp4783986ooa; Tue, 14 Aug 2018 10:30:02 -0700 (PDT) X-Google-Smtp-Source: AA+uWPyF7om4IXb1bSXSWT//wFEZ/llcRdPg2Gi9EcMPv2QXs9PgJ9doieKOK9eA/jjtijndNDRw X-Received: by 2002:a62:5a01:: with SMTP id o1-v6mr24606624pfb.0.1534267802746; Tue, 14 Aug 2018 10:30:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1534267802; cv=none; d=google.com; s=arc-20160816; b=tbCxK50CVRuP43vSxBWQxUXrPHu2B+L2d3LcZ7QOON462PaBjwC9w2H1vGfy5TxyTF e4HoRLoOEq0KaXUl0eODFE6XH59VMNbTixUxt0xdvR/4+E6H3lljYJP+2jFJO+H8Ugli 5t21kPygd6HUGJSSEkiYQHdDKKsCE0PWqLJQHbP/4mq2LpqtWDB/8UISL7U3gQYQ37NY 74JOVFda+TSDWOrsd6EU7joxTv+I584mymsIW2k5j1TY+esfaCayYaoD5b3dJePLZRrg 41WJndEg9v1XhzaIMI1AZen8UUbYP64TbwApoBMI1D1H5UrH1sgnuljEc55xy8hK0tlI jrOw== 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=wMnfyJYZNNyUN0vIwYP76+785u0atJHUGtylofLWl9I=; b=hnb0gZx5tp28FvPEevFDBwC2vT6Cz1x5CWksm2+csdVqc5uQ/pkcZmb9ujwJ/9fo3o Ain43UqO2eKNAOadlEd4RXxtT4uttr0HTZRtwHU/z1Fo5MZkQKMJjwQborHpzVqb3Ji1 JocFHJudJhpwnoZiEIVKILkZgS/j0AK/wrzn5BLD7XA5iTxe7GEULuH9Fr9TxJ0CdtmP Rw+S6dZMnKEMcICsGMa1ViS1JI3QTwf0I969MLDQPWwGgqihWJi1xR8+PQYCBENeeLpN znWxFtKKJAfmiXHCySK/JeO3/iIpv7JOkz9mA4eDjHzwf4oZkMD+9ml3yOK9bz/OCYX2 WpfQ== 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 r2-v6si18301320pgd.138.2018.08.14.10.29.47; Tue, 14 Aug 2018 10:30:02 -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 S2388896AbeHNUQR (ORCPT + 99 others); Tue, 14 Aug 2018 16:16:17 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:52592 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388227AbeHNUQQ (ORCPT ); Tue, 14 Aug 2018 16:16:16 -0400 Received: from localhost (unknown [194.244.16.108]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 4A462CBA; Tue, 14 Aug 2018 17:28:09 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Andi Kleen , Thomas Gleixner Subject: [PATCH 4.18 77/79] x86/mm/kmmio: Make the tracer robust against L1TF Date: Tue, 14 Aug 2018 19:17:36 +0200 Message-Id: <20180814171341.093567916@linuxfoundation.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180814171336.799314117@linuxfoundation.org> References: <20180814171336.799314117@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.18-stable review patch. If anyone has any objections, please let me know. ------------------ From: Andi Kleen The mmio tracer sets io mapping PTEs and PMDs to non present when enabled without inverting the address bits, which makes the PTE entry vulnerable for L1TF. Make it use the right low level macros to actually invert the address bits to protect against L1TF. In principle this could be avoided because MMIO tracing is not likely to be enabled on production machines, but the fix is straigt forward and for consistency sake it's better to get rid of the open coded PTE manipulation. Signed-off-by: Andi Kleen Signed-off-by: Thomas Gleixner Signed-off-by: Greg Kroah-Hartman --- arch/x86/mm/kmmio.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) --- a/arch/x86/mm/kmmio.c +++ b/arch/x86/mm/kmmio.c @@ -126,24 +126,29 @@ static struct kmmio_fault_page *get_kmmi static void clear_pmd_presence(pmd_t *pmd, bool clear, pmdval_t *old) { + pmd_t new_pmd; pmdval_t v = pmd_val(*pmd); if (clear) { - *old = v & _PAGE_PRESENT; - v &= ~_PAGE_PRESENT; - } else /* presume this has been called with clear==true previously */ - v |= *old; - set_pmd(pmd, __pmd(v)); + *old = v; + new_pmd = pmd_mknotpresent(*pmd); + } else { + /* Presume this has been called with clear==true previously */ + new_pmd = __pmd(*old); + } + set_pmd(pmd, new_pmd); } static void clear_pte_presence(pte_t *pte, bool clear, pteval_t *old) { pteval_t v = pte_val(*pte); if (clear) { - *old = v & _PAGE_PRESENT; - v &= ~_PAGE_PRESENT; - } else /* presume this has been called with clear==true previously */ - v |= *old; - set_pte_atomic(pte, __pte(v)); + *old = v; + /* Nothing should care about address */ + pte_clear(&init_mm, 0, pte); + } else { + /* Presume this has been called with clear==true previously */ + set_pte_atomic(pte, __pte(*old)); + } } static int clear_page_presence(struct kmmio_fault_page *f, bool clear)