Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp782271ybl; Wed, 11 Dec 2019 07:26:39 -0800 (PST) X-Google-Smtp-Source: APXvYqxC7QrxcvRuw+QPCQYwGKzqkCTSeVCDKTb2Ltfm2QgQ5RNSmUtA6guj0/c4NfbrpKcDIFV9 X-Received: by 2002:aca:ea46:: with SMTP id i67mr3049847oih.149.1576077999241; Wed, 11 Dec 2019 07:26:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1576077999; cv=none; d=google.com; s=arc-20160816; b=vw8ccP+bHy2Gt6Avn2ocLaNPimV7hw5Sl29Tqzy3T4ynMOnlJULTtvI4tIY4uePhBg DIUU0vqat2xVr4+oCVZjkg//ZDTxUKlFpToPTOkqIe48OUD4AHpmdo7uGzj0JEzSUZJ8 0odXTZApEYk5mSHTiWsK++Y66yZ3UrIlkSyWwGiBGE7R/GQ2YeCXXBIS2U3nle1TkD8j ciCHJNVYchO2+ZLbTB0amj/Ohwln+uvJ+HJKiOWMiMZAZY5M5OhR8HpvRb5g4Ejrf2np xn9Xfv+AdRclDQ26FZSi10kg2q7LZG1lVOgXDHVeDjj/2A5rIOUNQ035PLOz6M5KZyD4 gjpQ== 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:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=QdlRIgR21FSw9rzVnFNjt52imYRj0n46UQ1WFhhWxlk=; b=x/isZkbsD/BcYtCgRNUB6Yu0xCtMVpfBm4zJuNyR+WhXB+mZhDd7Q3Hc5F4XKcSygV 9XbHEcNEIOwdvBTvBgbQaNAEeXvvwVrMNEMMM+aW5XmLnLMaRtgKkHjn1SQOq11dXH9V IWPmoLsqBBCtazbbkOn98+qWK193J/8nvynnypj1Id9d62qYA0f2yAF+UCxplWcFq90U 9bg15tF3bmTa5Xmf60Zp/+bUw99gxWOtmLDWLm2DW3SNYSQvTOcipUB3LY4dQRJfiMPW KRdUeSC96OhDq9s7O2k6eXKh+zqAwv9pKrEPQkscFob28nPhCxHy63+RLdLxY+R6aVSJ vAtA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=oc9PddXd; 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 j18si1251465otq.275.2019.12.11.07.26.26; Wed, 11 Dec 2019 07:26:39 -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=@kernel.org header.s=default header.b=oc9PddXd; 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 S1733031AbfLKPZj (ORCPT + 99 others); Wed, 11 Dec 2019 10:25:39 -0500 Received: from mail.kernel.org ([198.145.29.99]:57910 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1733025AbfLKPZh (ORCPT ); Wed, 11 Dec 2019 10:25:37 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 420432465B; Wed, 11 Dec 2019 15:25:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1576077936; bh=F3/A8F98GMcNlAnUP0/wo9dpsX+L9fMdFUUEcEpTaPo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oc9PddXdoYZcDTatcszul4UZYrJ3z8zJ6O78FYEG9C5drr8MuiPhNuUGPZx6P2o+n YWw3426P1bkrXSyTwouZrzeD2gcHadmpBI97cfszogcRLbqb+LBOSz9/vxkUbiJ66R GVIXULQomSrFWKIMVWhxk3cNeVgS1U2zqk05ToI0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jim Mattson , Paolo Bonzini Subject: [PATCH 4.19 226/243] KVM: x86: do not modify masked bits of shared MSRs Date: Wed, 11 Dec 2019 16:06:28 +0100 Message-Id: <20191211150354.591209799@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191211150339.185439726@linuxfoundation.org> References: <20191211150339.185439726@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Paolo Bonzini commit de1fca5d6e0105c9d33924e1247e2f386efc3ece upstream. "Shared MSRs" are guest MSRs that are written to the host MSRs but keep their value until the next return to userspace. They support a mask, so that some bits keep the host value, but this mask is only used to skip an unnecessary MSR write and the value written to the MSR is always the guest MSR. Fix this and, while at it, do not update smsr->values[slot].curr if for whatever reason the wrmsr fails. This should only happen due to reserved bits, so the value written to smsr->values[slot].curr will not match when the user-return notifier and the host value will always be restored. However, it is untidy and in rare cases this can actually avoid spurious WRMSRs on return to userspace. Cc: stable@vger.kernel.org Reviewed-by: Jim Mattson Tested-by: Jim Mattson Signed-off-by: Paolo Bonzini Signed-off-by: Greg Kroah-Hartman --- arch/x86/kvm/x86.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -290,13 +290,14 @@ int kvm_set_shared_msr(unsigned slot, u6 struct kvm_shared_msrs *smsr = per_cpu_ptr(shared_msrs, cpu); int err; - if (((value ^ smsr->values[slot].curr) & mask) == 0) + value = (value & mask) | (smsr->values[slot].host & ~mask); + if (value == smsr->values[slot].curr) return 0; - smsr->values[slot].curr = value; err = wrmsrl_safe(shared_msrs_global.msrs[slot], value); if (err) return 1; + smsr->values[slot].curr = value; if (!smsr->registered) { smsr->urn.on_user_return = kvm_on_user_return; user_return_notifier_register(&smsr->urn);