From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Cyrus-Session-Id: sloti22d1t05-3496022-1516351389-2-3250303390412239041 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no ("Email failed DMARC policy for domain") X-Spam-score: 0.0 X-Spam-hits: BAYES_00 -1.9, HEADER_FROM_DIFFERENT_DOMAINS 0.25, ME_NOAUTH 0.01, RCVD_IN_DNSWL_HI -5, T_RP_MATCHES_RCVD -0.01, LANGUAGES endafr, BAYES_USED global, SA_VERSION 3.4.0 X-Spam-source: IP='209.132.180.67', Host='vger.kernel.org', Country='US', FromHeader='com', MailFrom='org' X-Spam-charsets: plain='utf-8' X-IgnoreVacation: yes ("Email failed DMARC policy for domain") X-Resolved-to: greg@kroah.com X-Delivered-to: greg@kroah.com X-Mail-from: stable-owner@vger.kernel.org ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=arctest; t=1516351388; b=UG/7UQh4auVW6nA6UNYzMCzKf122aeOGpaMFwsRikYDpcdp uISPHEG5heVzupH50NaCognzgzCpq4e8vVn1Lp+vjMEdCukgEtf20MkhF8xsmZEC u98A3VycF1prb3nWgWYZLM7avzCHXxYRoQE1eMKJvYFWNuXiwBxZuSgKaGMVt/ht wEFX3Qq8D847TeuZNFGESEAFDe09bAziMAo+zZZA2Uo0+oSIj/V+GsK1knH8sXkv /88wudcdUFlT2xFmImGKlSKkuABXa7OQBIzls4fWECfPAtO7Lgu66SwkUJLIWm6+ C9hHKXPjS9NmrJP6VyJyWSI72mSXm+uUgWCXmRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=subject:to:cc:references:from:message-id :date:mime-version:in-reply-to:content-type :content-transfer-encoding:sender:list-id; s=arctest; t= 1516351388; bh=31lcVOi9ZtlX6NAtsDZMaJ6Beg5tKKgmZMPPlsKn4Tw=; b=I LnDiAxHRpAnS/tUNxKuLIiVut5tSN2RghgOhNUpfMBnAnANBQKWab6vDM04FPHLx tWLeVuP0RxmkZJdO8zrNdFkbVAhVBFcQwR7w3aUE/UPtFogQx0XSb0Y0AF72sdgs PbbA5U2AGftGazneY1S4JJNJyI/DLM1GrErr6l50jgA8dDTLzw2hUaKvBONIYKpI CYZUAyXl+OkkNnCsEU+fQiO7aueD6SAWukmiAR6ah2isfpuV36BK4ypgRgwNrNU1 LNa2BioARC1D6EdycBidv9N4iGtJqxa9b+XZ1e6P+1ecqrQ9dFNNtIK0luEoESgL ZF3GA2azM37HwSdQ3aqtQ== ARC-Authentication-Results: i=1; mx2.messagingengine.com; arc=none (no signatures found); dkim=none (no signatures found); dmarc=fail (p=none,has-list-id=yes,d=none) header.from=redhat.com; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=stable-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=redhat.com header.result=pass header_is_org_domain=yes Authentication-Results: mx2.messagingengine.com; arc=none (no signatures found); dkim=none (no signatures found); dmarc=fail (p=none,has-list-id=yes,d=none) header.from=redhat.com; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=stable-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=redhat.com header.result=pass header_is_org_domain=yes Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754989AbeASInH (ORCPT ); Fri, 19 Jan 2018 03:43:07 -0500 Received: from mx1.redhat.com ([209.132.183.28]:42876 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754951AbeASInG (ORCPT ); Fri, 19 Jan 2018 03:43:06 -0500 Subject: Re: [PATCH v4 09/10] kvm, x86: fix spectre-v1 mitigation To: Dan Williams , linux-kernel@vger.kernel.org Cc: linux-arch@vger.kernel.org, kernel-hardening@lists.openwall.com, Andrew Honig , stable@vger.kernel.org, gregkh@linuxfoundation.org, tglx@linutronix.de, alan@linux.intel.com, torvalds@linux-foundation.org, akpm@linux-foundation.org, Jim Mattson References: <151632009605.21271.11304291057104672116.stgit@dwillia2-desk3.amr.corp.intel.com> <151632015123.21271.9060883997507739532.stgit@dwillia2-desk3.amr.corp.intel.com> From: Paolo Bonzini Message-ID: <729b6b10-500b-3002-4051-8a1d8fe31d27@redhat.com> Date: Fri, 19 Jan 2018 09:42:59 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 MIME-Version: 1.0 In-Reply-To: <151632015123.21271.9060883997507739532.stgit@dwillia2-desk3.amr.corp.intel.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: stable-owner@vger.kernel.org X-Mailing-List: stable@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-Mailing-List: linux-kernel@vger.kernel.org List-ID: On 19/01/2018 01:02, Dan Williams wrote: > Commit 75f139aaf896 "KVM: x86: Add memory barrier on vmcs field lookup" > added a raw 'asm("lfence");' to prevent a bounds check bypass of > 'vmcs_field_to_offset_table'. This does not work for some AMD cpus, see > the 'ifence' helper, The code never runs on AMD cpus (it's for Intel virtualization extensions), so it'd be nice if you could fix up the commit message. Apart from this, obviously Acked-by: Paolo Bonzini Thanks! Paolo > and it otherwise does not use the common > 'array_ptr' helper designed for these types of fixes. Convert this to > use 'array_ptr'. > > Cc: Andrew Honig > Cc: Jim Mattson > Cc: Paolo Bonzini > Cc: > Signed-off-by: Dan Williams > --- > arch/x86/kvm/vmx.c | 19 +++++++------------ > 1 file changed, 7 insertions(+), 12 deletions(-) > > diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c > index c829d89e2e63..20b9b0b5e336 100644 > --- a/arch/x86/kvm/vmx.c > +++ b/arch/x86/kvm/vmx.c > @@ -34,6 +34,7 @@ > #include > #include > #include > +#include > #include "kvm_cache_regs.h" > #include "x86.h" > > @@ -898,21 +899,15 @@ static const unsigned short vmcs_field_to_offset_table[] = { > > static inline short vmcs_field_to_offset(unsigned long field) > { > - BUILD_BUG_ON(ARRAY_SIZE(vmcs_field_to_offset_table) > SHRT_MAX); > - > - if (field >= ARRAY_SIZE(vmcs_field_to_offset_table)) > - return -ENOENT; > + const unsigned short *offset; > > - /* > - * FIXME: Mitigation for CVE-2017-5753. To be replaced with a > - * generic mechanism. > - */ > - asm("lfence"); > + BUILD_BUG_ON(ARRAY_SIZE(vmcs_field_to_offset_table) > SHRT_MAX); > > - if (vmcs_field_to_offset_table[field] == 0) > + offset = array_ptr(vmcs_field_to_offset_table, field, > + ARRAY_SIZE(vmcs_field_to_offset_table)); > + if (!offset || *offset == 0) > return -ENOENT; > - > - return vmcs_field_to_offset_table[field]; > + return *offset; > } > > static inline struct vmcs12 *get_vmcs12(struct kvm_vcpu *vcpu) >