Received: by 10.223.176.46 with SMTP id f43csp808839wra; Fri, 26 Jan 2018 07:15:35 -0800 (PST) X-Google-Smtp-Source: AH8x224jk5aN4/VX8Da5GvWjKNc/QO8eqUr3Lxuaq1vDb22whcFMQINIl8PVJwEjJE7BS/1JClqA X-Received: by 10.99.180.6 with SMTP id s6mr14939301pgf.5.1516979734996; Fri, 26 Jan 2018 07:15:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516979734; cv=none; d=google.com; s=arc-20160816; b=eO6lPI8JmqGXpk/fmrQq1fEiRLC03eN7g9uTNJBO3lkQTtCjfrUOoi3y93lFyox/sW t14uUDR7B2STTWXZFTdjj9LQ9h+y4hXYx+rUj72V3hBmJDwkS7Gh+DCZHJ8vJ2hVK+pj D/btu7viBShDazteP6HOjcN1XIc1Y1Cnemk53R+EbJ5aAMkNVPxZjbypTHdrcVE85unK gMjq9vne4XduefnUUMtHX5GPZf9rTlR/4+5UfMrPXX7PjmTeSBhunxqdqf8Yp5zYKyxd UCSwfeC+4bqrvgwbY87Zk29QBbBteZHtpVaUdleTyfbW/+9MW9GlEQhCf/qa+usWALHj M3Kw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-disposition :content-transfer-encoding:mime-version:robot-unsubscribe:robot-id :git-commit-id:subject:to:references:in-reply-to:reply-to:cc :message-id:from:date:arc-authentication-results; bh=SJ6HKD2fGpLJfwrwt/43PYlJtcQJ9d++TneXBU/haIU=; b=raA/+wGd4bdoowsUx9f8Iv0NgZYDxXldrVs1L9P5QKuVSxDpeOFcXyZ0vxaTrEfbZH u2exZqaz4nmeECeYXjK63+hYYWWp1zJXFuMTBaEnsW/3Z9CDzKfrLRjeFfWGOsaxiQ7G WBEoJvsW4/+g5BqSBlpL6+Un7iRi0RnupIGRSkL81RbU+6F2m+zfGIpbBfu3pg741qKu 6xwm5zgTGiZi5fpLzMlEFA7IyOKnd6F9Ta0WD+xcGHqGj2DArfg4PjDv24qMI0ue37sd kId4kz4ffgN8C7qdLSsMg7mlC+UF6lRhp1VESxsVcTQLE0hyC1RMKmjqoqzLCHlefEao Q5BQ== 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 i62si6471507pfe.383.2018.01.26.07.15.20; Fri, 26 Jan 2018 07:15:34 -0800 (PST) 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 S1753638AbeAZPOV (ORCPT + 99 others); Fri, 26 Jan 2018 10:14:21 -0500 Received: from terminus.zytor.com ([65.50.211.136]:56487 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753433AbeAZPOT (ORCPT ); Fri, 26 Jan 2018 10:14:19 -0500 Received: from terminus.zytor.com (localhost [127.0.0.1]) by terminus.zytor.com (8.15.2/8.15.2) with ESMTP id w0QF1PBE031484; Fri, 26 Jan 2018 07:01:25 -0800 Received: (from tipbot@localhost) by terminus.zytor.com (8.15.2/8.15.2/Submit) id w0QF1OZw031481; Fri, 26 Jan 2018 07:01:24 -0800 Date: Fri, 26 Jan 2018 07:01:24 -0800 X-Authentication-Warning: terminus.zytor.com: tipbot set sender to tipbot@zytor.com using -f From: tip-bot for David Woodhouse Message-ID: Cc: gregkh@linuxfoundation.org, dave.hansen@intel.com, tglx@linutronix.de, bp@suse.de, linux-kernel@vger.kernel.org, mingo@kernel.org, hpa@zytor.com, dwmw@amazon.co.uk Reply-To: dwmw@amazon.co.uk, hpa@zytor.com, linux-kernel@vger.kernel.org, mingo@kernel.org, dave.hansen@intel.com, bp@suse.de, tglx@linutronix.de, gregkh@linuxfoundation.org In-Reply-To: <1516896855-7642-6-git-send-email-dwmw@amazon.co.uk> References: <1516896855-7642-6-git-send-email-dwmw@amazon.co.uk> To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/pti] x86/pti: Do not enable PTI on CPUs which are not vulnerable to Meltdown Git-Commit-ID: fec9434a12f38d3aeafeb75711b71d8a1fdef621 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 X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on terminus.zytor.com Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: fec9434a12f38d3aeafeb75711b71d8a1fdef621 Gitweb: https://git.kernel.org/tip/fec9434a12f38d3aeafeb75711b71d8a1fdef621 Author: David Woodhouse AuthorDate: Thu, 25 Jan 2018 16:14:13 +0000 Committer: Thomas Gleixner CommitDate: Fri, 26 Jan 2018 15:53:18 +0100 x86/pti: Do not enable PTI on CPUs which are not vulnerable to Meltdown Also, for CPUs which don't speculate at all, don't report that they're vulnerable to the Spectre variants either. Leave the cpu_no_meltdown[] match table with just X86_VENDOR_AMD in it for now, even though that could be done with a simple comparison, on the assumption that we'll have more to add. Based on suggestions from Dave Hansen and Alan Cox. Signed-off-by: David Woodhouse Signed-off-by: Thomas Gleixner Reviewed-by: Greg Kroah-Hartman Reviewed-by: Borislav Petkov Acked-by: Dave Hansen Cc: gnomes@lxorguk.ukuu.org.uk Cc: ak@linux.intel.com Cc: ashok.raj@intel.com Cc: karahmed@amazon.de Cc: arjan@linux.intel.com Cc: torvalds@linux-foundation.org Cc: peterz@infradead.org Cc: bp@alien8.de Cc: pbonzini@redhat.com Cc: tim.c.chen@linux.intel.com Cc: gregkh@linux-foundation.org Link: https://lkml.kernel.org/r/1516896855-7642-6-git-send-email-dwmw@amazon.co.uk --- arch/x86/kernel/cpu/common.c | 48 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index e5d66e9..970ee06 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c @@ -47,6 +47,8 @@ #include #include #include +#include +#include #ifdef CONFIG_X86_LOCAL_APIC #include @@ -853,6 +855,41 @@ static void identify_cpu_without_cpuid(struct cpuinfo_x86 *c) #endif } +static const __initdata struct x86_cpu_id cpu_no_speculation[] = { + { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_CEDARVIEW, X86_FEATURE_ANY }, + { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_CLOVERVIEW, X86_FEATURE_ANY }, + { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_LINCROFT, X86_FEATURE_ANY }, + { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_PENWELL, X86_FEATURE_ANY }, + { X86_VENDOR_INTEL, 6, INTEL_FAM6_ATOM_PINEVIEW, X86_FEATURE_ANY }, + { X86_VENDOR_CENTAUR, 5 }, + { X86_VENDOR_INTEL, 5 }, + { X86_VENDOR_NSC, 5 }, + { X86_VENDOR_ANY, 4 }, + {} +}; + +static const __initdata struct x86_cpu_id cpu_no_meltdown[] = { + { X86_VENDOR_AMD }, + {} +}; + +static bool __init cpu_vulnerable_to_meltdown(struct cpuinfo_x86 *c) +{ + u64 ia32_cap = 0; + + if (x86_match_cpu(cpu_no_meltdown)) + return false; + + if (cpu_has(c, X86_FEATURE_ARCH_CAPABILITIES)) + rdmsrl(MSR_IA32_ARCH_CAPABILITIES, ia32_cap); + + /* Rogue Data Cache Load? No! */ + if (ia32_cap & ARCH_CAP_RDCL_NO) + return false; + + return true; +} + /* * Do minimum CPU detection early. * Fields really needed: vendor, cpuid_level, family, model, mask, @@ -900,11 +937,12 @@ static void __init early_identify_cpu(struct cpuinfo_x86 *c) setup_force_cpu_cap(X86_FEATURE_ALWAYS); - if (c->x86_vendor != X86_VENDOR_AMD) - setup_force_cpu_bug(X86_BUG_CPU_MELTDOWN); - - setup_force_cpu_bug(X86_BUG_SPECTRE_V1); - setup_force_cpu_bug(X86_BUG_SPECTRE_V2); + if (!x86_match_cpu(cpu_no_speculation)) { + if (cpu_vulnerable_to_meltdown(c)) + setup_force_cpu_bug(X86_BUG_CPU_MELTDOWN); + setup_force_cpu_bug(X86_BUG_SPECTRE_V1); + setup_force_cpu_bug(X86_BUG_SPECTRE_V2); + } fpu__init_system(c);