Received: by 10.223.185.116 with SMTP id b49csp4438668wrg; Mon, 26 Feb 2018 18:24:18 -0800 (PST) X-Google-Smtp-Source: AH8x225A/QxwPJSwZXn/FWVtii/TQv602QP5L2/FaJmPWhs7SofdmNHenRPco5oVxUIQBDBt5X70 X-Received: by 2002:a17:902:5819:: with SMTP id m25-v6mr12518350pli.248.1519698258142; Mon, 26 Feb 2018 18:24:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519698258; cv=none; d=google.com; s=arc-20160816; b=OL/sM8vnGiizIZA2W5ukM79I+NpmH1nzcw1V1mNdhso+YV/oeE9TY1KWxQBy2A74fw 7L9lDfSUHP8t9MA5ASUZ4nErohSNr1VhKrlhvWdHRFdGoUbcaISsAqmapI21coVX3uq2 D9rc3Oaq9BpM0bf4ZPBw5d7Aw4rr4eyrwTIrvpXivO9gZcF+HR5HJcYOX2eTXfbH20y2 oJOxbmIpLhBinZVTLWphBlob2V5cFqAtJUOkHumzdIIRpxztfcGtIiA6lUQHbKsRCW+p qlU3kL2mfnTNZ1NhvbXXE9mKni9vhh9o9vhTvqagm2vbygIqC/NQSB9WGWV2tVZ0CcqF afJg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:cc:to:subject :message-id:date:from:references:in-reply-to:mime-version :dkim-signature:arc-authentication-results; bh=iWQVd8VvEbwDXqP7tZGgmYSWITzmNx4UP7FkHm5Edgk=; b=cvLjGBcqWzApzaVA56bWjjhnJUGbeW70Pci2yAmoCxyFoyKysc6siDmZcDjwb6cq+x CSXXqJ6eGPl1qttw8D2vMUnPicnR7317250FoxpxGc3teKSfc8J6FHpx86Rn89AZ6r7Y 2FzmZrpXpTFIod77mOFkHUOzcyGR6Z95+7iVcJTNLgFzOGYXLOEpGbKkP3WXSb/Ay0xM R5mr1cbioznJKZt6wlo7KJ5gfpAWah6PNU/QbkzoGalPpzTGJbcAukx2fonNZClSto13 469MwNoXPlBFDYHdt7qdlKwhol1jJ4oCfDCyvVpQpl4AjHcnBwSI9vTsTML20SxYNoHC gMlA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=q8/L0RrF; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q11si7760389pfi.35.2018.02.26.18.24.03; Mon, 26 Feb 2018 18:24:18 -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; dkim=pass header.i=@gmail.com header.s=20161025 header.b=q8/L0RrF; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751878AbeB0CWj (ORCPT + 99 others); Mon, 26 Feb 2018 21:22:39 -0500 Received: from mail-oi0-f66.google.com ([209.85.218.66]:35433 "EHLO mail-oi0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751514AbeB0CWh (ORCPT ); Mon, 26 Feb 2018 21:22:37 -0500 Received: by mail-oi0-f66.google.com with SMTP id x10so9235653oig.2; Mon, 26 Feb 2018 18:22:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=iWQVd8VvEbwDXqP7tZGgmYSWITzmNx4UP7FkHm5Edgk=; b=q8/L0RrFYi7Sd9rSL1tZrkFEmKyYJ2n02n1MG50amCgx6kZ8fpt+wp9qmFOQkFu4SY HM5PukUP+UtIBiaYKgTDJuUS6Diq9t7q/jJVJs6rJ3cHHK6qBMPvWGF98zKxCnt9RotA DS7Aa0HhmnMW0u8MjANBNpP8oTzBttgy6U5tmuy9vzEZv/z/Njx65iPmosxRd4322ZcY N0DdlIjBaYfhFYI4FLrWqy8NnjqGeCvAgkVeFKjfHKsgMTVKIzs8f7ZB6Dk3qS0DxA84 Y4ibdXv0JmUudI42/RVeogvXn0r4p7MSu/cvcd5KS93SUzzeR2BxNyqI10QVk+Yo5SHu xZIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=iWQVd8VvEbwDXqP7tZGgmYSWITzmNx4UP7FkHm5Edgk=; b=aytcEtZ8NoxviGqYcGYrrKJ8qgk1bCVFJ60ahz3F9GZLWFXXN381515VmjrhCBGEuG hecr5aj/j64I2dLA1/QYGiJ/k+mKDBnO7XWO7VmTImRwldOH/pGBrpI/AWGklufuCIO6 TJiH13I2yEARu9uqSRAbcWUtDDi2xqMq5DNL+/JzAsE06BvcGh8IRhjYMqMQmR9MedKl prunFNnO1yClLgZEQr+8GB0Oy8+qgnFxpaZpX/s9Vpwb60NB1XqwTsHceZKwg/w0zFki yYu7Z3EclOhauIi99jV9lAFmqyCMAAEHgHiR5WnQWfoVMaqlNy99rBZE/274MertB5Fe cRnw== X-Gm-Message-State: APf1xPB1nZaIqsZbsKWnZXsMrhBGNQ22fY+1A0m9O9dYi2FqF71O9WyO cK09O9L2DxVYaM3RPSkz22T/YU2xnz+bgbMd9j0= X-Received: by 10.202.26.7 with SMTP id a7mr8312810oia.267.1519698156916; Mon, 26 Feb 2018 18:22:36 -0800 (PST) MIME-Version: 1.0 Received: by 10.74.208.10 with HTTP; Mon, 26 Feb 2018 18:22:36 -0800 (PST) In-Reply-To: References: <1519694331-16368-1-git-send-email-wanpengli@tencent.com> From: Wanpeng Li Date: Tue, 27 Feb 2018 10:22:36 +0800 Message-ID: Subject: Re: [PATCH v3] KVM: X86: Allow userspace to define the microcode version To: Nadav Amit Cc: LKML , kvm , Paolo Bonzini , =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , Liran Alon Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 2018-02-27 9:30 GMT+08:00 Nadav Amit : > Wanpeng Li wrote: > >> From: Wanpeng Li >> >> Linux (among the others) has checks to make sure that certain features >> aren't enabled on a certain family/model/stepping if the microcode versi= on >> isn't greater than or equal to a known good version. >> >> By exposing the real microcode version, we're preventing buggy guests th= at >> don't check that they are running virtualized (i.e., they should trust t= he >> hypervisor) from disabling features that are effectively not buggy. >> >> Suggested-by: Filippo Sironi >> Cc: Paolo Bonzini >> Cc: Radim Kr=C4=8Dm=C3=A1=C5=99 >> Cc: Liran Alon >> Signed-off-by: Wanpeng Li >> --- >> v2 -> v3: >> * remove the shifts >> * add the MSR_IA32_UCODE_REV version to the "feature MSRs" >> v1 -> v2: >> * add MSR_IA32_UCODE_REV to emulated_msrs >> >> arch/x86/include/asm/kvm_host.h | 1 + >> arch/x86/kvm/x86.c | 19 +++++++++++++++---- >> 2 files changed, 16 insertions(+), 4 deletions(-) >> >> diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_= host.h >> index 938d453..6e13f2f 100644 >> --- a/arch/x86/include/asm/kvm_host.h >> +++ b/arch/x86/include/asm/kvm_host.h >> @@ -507,6 +507,7 @@ struct kvm_vcpu_arch { >> u64 smi_count; >> bool tpr_access_reporting; >> u64 ia32_xss; >> + u32 microcode_version; >> >> /* >> * Paging state of the vcpu >> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c >> index d4985a9..00af28e 100644 >> --- a/arch/x86/kvm/x86.c >> +++ b/arch/x86/kvm/x86.c >> @@ -1058,6 +1058,7 @@ static unsigned num_emulated_msrs; >> static u32 msr_based_features[] =3D { >> MSR_IA32_ARCH_CAPABILITIES, >> MSR_F10H_DECFG, >> + MSR_IA32_UCODE_REV, >> }; >> >> static unsigned int num_msr_based_features; >> @@ -1067,8 +1068,14 @@ static int do_get_msr_feature(struct kvm_vcpu *vc= pu, unsigned index, u64 *data) >> struct kvm_msr_entry msr; >> >> msr.index =3D index; >> - if (kvm_x86_ops->get_msr_feature(&msr)) >> - return 1; >> + switch (msr.index) { >> + case MSR_IA32_UCODE_REV: >> + rdmsrl(msr.index, msr.data); >> + break; >> + default: >> + if (kvm_x86_ops->get_msr_feature(&msr)) >> + return 1; >> + } >> >> *data =3D msr.data; >> >> @@ -2248,7 +2255,6 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, stru= ct msr_data *msr_info) >> >> switch (msr) { >> case MSR_AMD64_NB_CFG: >> - case MSR_IA32_UCODE_REV: >> case MSR_IA32_UCODE_WRITE: >> case MSR_VM_HSAVE_PA: >> case MSR_AMD64_PATCH_LOADER: >> @@ -2256,6 +2262,10 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, str= uct msr_data *msr_info) >> case MSR_AMD64_DC_CFG: >> break; >> >> + case MSR_IA32_UCODE_REV: >> + if (msr_info->host_initiated) >> + vcpu->arch.microcode_version =3D data; >> + break; >> case MSR_EFER: >> return set_efer(vcpu, data); >> case MSR_K7_HWCR: >> @@ -2551,7 +2561,7 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, stru= ct msr_data *msr_info) >> msr_info->data =3D 0; >> break; >> case MSR_IA32_UCODE_REV: >> - msr_info->data =3D 0x100000000ULL; >> + msr_info->data =3D (u64)vcpu->arch.microcode_version; > > I think that the shifts are missing here (the version should be on the hi= gh > bits according to intel_get_microcode_revision() ). You are right, it seems that we all miss it before. Regards, Wanpeng Li