Received: by 2002:a05:6358:45e:b0:b5:b6eb:e1f9 with SMTP id 30csp6633rwe; Wed, 24 Aug 2022 14:59:30 -0700 (PDT) X-Google-Smtp-Source: AA6agR58wbW0aRGpwdBBJA6Ao+oelvgdUNaovpZybcf9EdwJA6zdAfemiLUO0pv7nKmu0VZyb9zD X-Received: by 2002:a05:6402:2682:b0:446:a78b:b49f with SMTP id w2-20020a056402268200b00446a78bb49fmr806265edd.390.1661378369772; Wed, 24 Aug 2022 14:59:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1661378369; cv=none; d=google.com; s=arc-20160816; b=qv9DuCLzsqBvkEXV00FgLcDhH+odxonqHjnKsY7guIZwt7NwzMlWW/qQpUe9MfBVt/ qW5J9C6wD82dCTtP+RMOQi1G/tT+mxMHvSZy5/+mQVrxCxoAzF7oBH9Bh4F2/sca7Mzf fHLH7fY95tO0S1fWVcddwFnzI+zMtxJ0w4SKJi5xAwxDDqwv/EmIKvXpJJ+t6n9URZxu JrvSqLngzjc0J+HL7xrAk2jyRc9ilzC5Yi2eYLJix87Ji0swAgWSX0MzmPW5X0a+Lx4v AwVOit2kX5sNyPcWI4LAJ0czW6yXtDJrzVfYkYYlKcgvMGDnO/Bi0ZbHm/A9QISKLz7r 4G9w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=GzeQ8UfnZgFzVsS9nYnsVjGN8/XJ7d4LfMKvcO3JEq8=; b=Khxg18s2LDn/dGw7ocPklbA2bd44TePuGWuXzmzpYkZpdTSR5EpBVDV7/gzevEFDzo NEqJYRyy0QfvHOYVKeYiAFVfrVGrCvkskQ+II28lLi4A72l79lclyynq2Hsz3mEemkra vAKkqUR8RymYvxbZwlA2XmzvgF+oPCEMTxbnHvhV9HE7vOivx43gcw+4Cnsn5F1YfVXO fesxdbroGDtQUlNgBRNQtH5BN0zPX8adhuKuwbsXIdPz3qZ+TrMvxB1MC1a2NI0M/JQV gTO42A06XSRS5LZxts8mLaQGcXTsTEFaDI32j20m/bga5xYClsTk0WydjwtbBNcVBQGU ezBw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=fJiqL8P2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id f10-20020a50d54a000000b004409963eb80si4665728edj.432.2022.08.24.14.59.03; Wed, 24 Aug 2022 14:59:29 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=fJiqL8P2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240266AbiHXV5R (ORCPT + 99 others); Wed, 24 Aug 2022 17:57:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54168 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240098AbiHXV5P (ORCPT ); Wed, 24 Aug 2022 17:57:15 -0400 Received: from mail-pg1-x52b.google.com (mail-pg1-x52b.google.com [IPv6:2607:f8b0:4864:20::52b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DC675760CA for ; Wed, 24 Aug 2022 14:57:13 -0700 (PDT) Received: by mail-pg1-x52b.google.com with SMTP id v4so16160561pgi.10 for ; Wed, 24 Aug 2022 14:57:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc; bh=GzeQ8UfnZgFzVsS9nYnsVjGN8/XJ7d4LfMKvcO3JEq8=; b=fJiqL8P2aKKxhbMkesL39klbja+GBE8/578Sh/oxZl+m0V6Zb0QrWGQZMtA0YjQyQ8 ptKPk0bn7TO/Ee00EZblLeT2kzuYax7CRD8KE2w5a8O1XDoHo8ntpzVe06zTQmOE4f3f hvVqGNqLeLyg49aKRTu2N4ygCzvXTepUO0qsqg56meDNO3lmV84tdedCGZRvDFY4odb9 fGajR1I4gm+j6X1EOxJOEHrtq93+J0O5iWbaLkl2cwf9df+nOxni6TCB7Gqd549TmhNH WAg1Fc9NyOCx870DM6iTg9+cdq7HEXEL2hNIqPSi3Jua/NO4YRD6UZqohW9ScXG1BQod ACUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc; bh=GzeQ8UfnZgFzVsS9nYnsVjGN8/XJ7d4LfMKvcO3JEq8=; b=bnBtkkGK6gU6mHcqqTIR2kWKmPL4BC+3rXEwTT4BYdjdXBSGLl+BClhUuSOXwvm1PU cmDf15jRMg3b+kol8B4udfNfvRcG397jF4nJ2HLFiR8w4qoACwi+wGPCOcmW/p84GB8a fWSXlXQkzjksI+4UUdGpsgvFOZDsiP0aDvX2COQXom0RpVkH94DaRW2ijWaogcNxHDM9 ygsHinTHuXszYMhMX7jNkEiyB4IbIB0TDLpZ4P+AijqOB6dls/DPl7FB3e6U0mHUjzgA wwPSH8pUxr0mdr7lsGY8vP3VS8yvuA5jW2GIXOEdFsMdhClUhQTRp6vVCF3yIKuX2k1B vbig== X-Gm-Message-State: ACgBeo29JmaJcrZp8K+9LF4w58h0q4Nh9Ipwd0V7gqqJ1MPlydg4sMAW ZkIlPBt04k2cTjVtMlHFq+kXWw== X-Received: by 2002:a62:1795:0:b0:536:4e84:5ee9 with SMTP id 143-20020a621795000000b005364e845ee9mr1031193pfx.52.1661378233171; Wed, 24 Aug 2022 14:57:13 -0700 (PDT) Received: from google.com (7.104.168.34.bc.googleusercontent.com. [34.168.104.7]) by smtp.gmail.com with ESMTPSA id z38-20020a630a66000000b0041a67913d5bsm11498087pgk.71.2022.08.24.14.57.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Aug 2022 14:57:12 -0700 (PDT) Date: Wed, 24 Aug 2022 21:57:09 +0000 From: Sean Christopherson To: Maxim Levitsky Cc: kvm@vger.kernel.org, Borislav Petkov , Dave Hansen , linux-kernel@vger.kernel.org, Wanpeng Li , Ingo Molnar , x86@kernel.org, Jim Mattson , Kees Cook , Thomas Gleixner , "H. Peter Anvin" , Joerg Roedel , Vitaly Kuznetsov , Paolo Bonzini Subject: Re: [PATCH v3 05/13] KVM: x86: emulator: update the emulation mode after CR0 write Message-ID: References: <20220803155011.43721-1-mlevitsk@redhat.com> <20220803155011.43721-6-mlevitsk@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20220803155011.43721-6-mlevitsk@redhat.com> X-Spam-Status: No, score=-14.5 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH,FSL_HELO_FAKE,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED,USER_IN_DEF_DKIM_WL, USER_IN_DEF_SPF_WL 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 On Wed, Aug 03, 2022, Maxim Levitsky wrote: > CR0.PE toggles real/protected mode, thus its update Uber nit, I like using title case for Real Mode, Protected Mode, etc... so that it's more obvious that a changelog/comment is referring to the architectural modes. > should update the emulation mode. > > This is likely a benign bug because there is no writeback > of state, other than the RIP increment, and when toggling > CR0.PE, the CPU has to execute code from a very low memory address. > > Also CR0.PG toggle when EFER.LMA is set, toggles the long mode. This last sentence is jumbled, and it probably fits better with the opening sentence. And it's technically EFER.LME; EFER.LMA=1 indicates the Long Mode is fully active. E.g. something like Update the emulation mode when handling writes to CR0, toggling CR0.PE switches between Real and Protected Mode, and toggling CR0.PG when EFER.LME=1 switches between Long and Protected Mode. > > Signed-off-by: Maxim Levitsky > --- > arch/x86/kvm/emulate.c | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c > index 5e91b26cc1d8aa..765ec65b2861ba 100644 > --- a/arch/x86/kvm/emulate.c > +++ b/arch/x86/kvm/emulate.c > @@ -3658,11 +3658,23 @@ static int em_movbe(struct x86_emulate_ctxt *ctxt) > > static int em_cr_write(struct x86_emulate_ctxt *ctxt) > { > - if (ctxt->ops->set_cr(ctxt, ctxt->modrm_reg, ctxt->src.val)) > + int cr_num = ctxt->modrm_reg; > + int r; > + > + if (ctxt->ops->set_cr(ctxt, cr_num, ctxt->src.val)) > return emulate_gp(ctxt, 0); > > /* Disable writeback. */ > ctxt->dst.type = OP_NONE; > + > + if (cr_num == 0) { > + /* CR0 write might have updated CR0.PE and/or CR0.PG > + * which can affect the cpu execution mode */ /* * Multi-line comment format should look like this. I need more * words to make this multiple lines. */ > + r = emulator_recalc_and_set_mode(ctxt); > + if (r != X86EMUL_CONTINUE) > + return r; > + } > + > return X86EMUL_CONTINUE; > } > > -- > 2.26.3 >