Received: by 2002:a05:6a10:2726:0:0:0:0 with SMTP id ib38csp740348pxb; Tue, 5 Apr 2022 21:12:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxPyodGQ5lJQN3WlxvRkrnDbnqaH82gJBEju+EHAhxo7MVeR90GCDvIgA6+TBCB+pgUL7nz X-Received: by 2002:a05:6a00:1907:b0:4f7:945:14cf with SMTP id y7-20020a056a00190700b004f7094514cfmr6850000pfi.47.1649218362800; Tue, 05 Apr 2022 21:12:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649218362; cv=none; d=google.com; s=arc-20160816; b=Tt6XqG8Jvm8yzXMnevysJWW4N5LCw32IQ9TjjCY5vGMGvyxY86Lor+2AsLPh3DLWp/ jkufFbswFYLHd+A37WyblQ3piFLQJc5Z9Sv25cz47deuHVrq0/mfB6kbwOj36xCBOQ1i rsGUeDR5U5BGunwGZp0ztaxQp/qTs7jdXaN7ugpeu3VdVrMTvcWYGg/0hlIaataB7g4z 11j7guZkiXE9m0OZaBV9ukYWd+7IG6PpGPZ7CwBVVOTE6eq8BfspxOBHhANEcxJkgDQW dbzVWzXtdMiJFQU3HUjxSKZLQ8k9PnO1CFtYxEdLQAmj7OdtAiiu1DuyyJFsZzNOKC6W C/0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=owK6PgQ7WdLzGlyvdF8bdsyFAOmX8Jycqxwn4xxQ0HM=; b=qOvxgozaMhls2/BeL8XMSZW3lNugyLRjp1Ev3vSIYcePxgUnKHUMOEgt9UY2737e5I cYzrIBffUSP4FSCAXOkUHQW+WqaPhIsEZyk2j4xN9PmofHdm6imUfVl8pny6YsHywO8K 24Odse/Q7uOGsBwQN7Wt18edp0Av1TDW5pFhvJGdslVXcjCEXjm8EYc43eJaDHDxzlka 654RaaO5x7SHk5A9c8KrsD5mfice5qjt8VS51cxtYzvkNs9Rz2zZuGry7rHMMr05ZviA HWBG2a5ME9MPK7qS/XzWCCZtFfFVMbRG9o78jLiXGCziRerVtC3ejNGmjARrRGKvtHmN 15dA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=O2e9Irvf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id x13-20020a17090a6b4d00b001c9ce741417si1785371pjl.0.2022.04.05.21.12.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Apr 2022 21:12:42 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=O2e9Irvf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id D44763AC6B1; Tue, 5 Apr 2022 21:05:14 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1456220AbiDFAZY (ORCPT + 99 others); Tue, 5 Apr 2022 20:25:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33950 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352745AbiDEKFC (ORCPT ); Tue, 5 Apr 2022 06:05:02 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 45974BBE31; Tue, 5 Apr 2022 02:53:45 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 2854AB81B13; Tue, 5 Apr 2022 09:53:44 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8BEBAC385A2; Tue, 5 Apr 2022 09:53:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1649152422; bh=tTRgRGkVhs4MQfo1x1AjnjCGjBN5nYhl1z3dsRALaTk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=O2e9IrvfhCdQqaowO+qnU2S1/3Y5vu4AHaE3CGYMjwTS8Y08wVs/cscrkJikURyvQ Vq18RikC6kKRFwOZqfCEy7pmr9yumz/CH1yfoixR/t2gbETbiQ8K2pK/XFpyt7doB9 /awonEX42JmwSLLNv97p2rCKle9W6Xk85id4AoUQ= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Sean Christopherson , Paolo Bonzini Subject: [PATCH 5.15 770/913] KVM: x86: Reinitialize context if host userspace toggles EFER.LME Date: Tue, 5 Apr 2022 09:30:32 +0200 Message-Id: <20220405070402.913373835@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220405070339.801210740@linuxfoundation.org> References: <20220405070339.801210740@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Paolo Bonzini commit d6174299365ddbbf491620c0b8c5ca1a6ef2eea5 upstream. While the guest runs, EFER.LME cannot change unless CR0.PG is clear, and therefore EFER.NX is the only bit that can affect the MMU role. However, set_efer accepts a host-initiated change to EFER.LME even with CR0.PG=1. In that case, the MMU has to be reset. Fixes: 11988499e62b ("KVM: x86: Skip EFER vs. guest CPUID checks for host-initiated writes") Cc: stable@vger.kernel.org Reviewed-by: Sean Christopherson Signed-off-by: Paolo Bonzini Signed-off-by: Greg Kroah-Hartman --- arch/x86/kvm/mmu.h | 1 + arch/x86/kvm/x86.c | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) --- a/arch/x86/kvm/mmu.h +++ b/arch/x86/kvm/mmu.h @@ -49,6 +49,7 @@ X86_CR4_LA57) #define KVM_MMU_CR0_ROLE_BITS (X86_CR0_PG | X86_CR0_WP) +#define KVM_MMU_EFER_ROLE_BITS (EFER_LME | EFER_NX) static __always_inline u64 rsvd_bits(int s, int e) { --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -1605,8 +1605,7 @@ static int set_efer(struct kvm_vcpu *vcp return r; } - /* Update reserved bits */ - if ((efer ^ old_efer) & EFER_NX) + if ((efer ^ old_efer) & KVM_MMU_EFER_ROLE_BITS) kvm_mmu_reset_context(vcpu); return 0;