Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp2263929ybl; Thu, 19 Dec 2019 10:39:10 -0800 (PST) X-Google-Smtp-Source: APXvYqwmpkWqCqvnmwF+8XnS/QmK4ystQCKlvnB5bdv9EiaCEJiuC8U9+yyYBoX7Ju2Yhn1783dW X-Received: by 2002:a9d:7c97:: with SMTP id q23mr10097938otn.253.1576780750590; Thu, 19 Dec 2019 10:39:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1576780750; cv=none; d=google.com; s=arc-20160816; b=rb8Dg6rLSROu6V7TRzqIJdqoJiHsy8UKxhreEB9MQocIH5fdpFREY+mCqw9eUz/wSd y3tejV1wQPzvDYFjPf7IrShC2HwS1U1WB12I5D8kTFB+YLtPyESW+/j5ETDBUsAgGRic 3I5ZU7IanYGr1ZuAXkDP100KnpLCoWx1KURHPJmyJTjO0Hgc5YR1E2F8KUullvhCG59a q6eqm70qyVEXn2FE2MehsHgGhqKBiseOJzPWjqN7+0IWXy4lNgTR7Muf7LMkFpatWPZv n/EbDW6SGa8Od7TwVC6tcBuqOe9MUbpBQ5bTv8dq3oOqYrpd7kUydBqyL6bI463ED7fs yrLA== 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=36UN28qJxGSKSUo1nLhEOD/Jfxsjmip/xQJ+ILsYzPQ=; b=a2I00cLBuKP3k7T5vjfI9rCdzmX83WV1+P2u0FUPmncjEFqJBWEmH7OuSIhdtHkRkV A1IM3UWjMV2Mc/yohK8Ur0EumPaZYbtwBIsZoy7Sv8wwxYbmptstfocg/8ZmqKQ6FUFz Fg72fphahzaygc2pYJI+vDsvxmCCFvfvsctNprQCwUXNFy2qs164DbhMsI147nNBYWo8 fOOCNnk6NHC8ldA0dlJ3CUROZyE5SZWx0xAPbQc7srjKqsGFooZfzngxsFZskwszRopL hc28wgmgjQibyUoJdRHRW/5ib84vIIsqxuVAW+prsaspYOPL5tpRpbCSlZKw9zoBZRY3 Yk1A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=jrXElFJJ; 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 m24si3749217otn.67.2019.12.19.10.38.59; Thu, 19 Dec 2019 10:39:10 -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=jrXElFJJ; 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 S1727884AbfLSShs (ORCPT + 99 others); Thu, 19 Dec 2019 13:37:48 -0500 Received: from mail.kernel.org ([198.145.29.99]:55462 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727535AbfLSShm (ORCPT ); Thu, 19 Dec 2019 13:37:42 -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 2CD61222C2; Thu, 19 Dec 2019 18:37:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1576780661; bh=61R/NdHf82RLsqLQhBJmvUPZm4nSs/T2wCwYyyd8fuU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jrXElFJJBFl4tDtUoXKqhSaMUhYwQ2T3Z6dKLM/m7JyJM4ohYPUXRubg4qey4oCrO GnZ56PhwOfLe8GC3oaiGH/Tycsir6nooOw73A24K9cBMtvGui/itLMfeh9CuH2KB/S tQd7IYTAJwdi0O1G+k7eVb7yDxxCPaZ/dGYhD3Q0= 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.4 064/162] KVM: x86: do not modify masked bits of shared MSRs Date: Thu, 19 Dec 2019 19:32:52 +0100 Message-Id: <20191219183211.746261732@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191219183150.477687052@linuxfoundation.org> References: <20191219183150.477687052@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 @@ -260,13 +260,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);