From patchwork Wed Mar 22 14:32:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 73466 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:604a:0:0:0:0:0 with SMTP id j10csp2377093wrt; Wed, 22 Mar 2023 07:39:08 -0700 (PDT) X-Google-Smtp-Source: AK7set/Y9k6VKIivqs8Ea46R5K7yE3KEJOlukXBdi2jRDSI7jX4P8KhcGU8z0x43bLHAGeHOYmQ9 X-Received: by 2002:a05:6402:2920:b0:500:2cc6:36d5 with SMTP id ee32-20020a056402292000b005002cc636d5mr2506133edb.8.1679495947911; Wed, 22 Mar 2023 07:39:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679495947; cv=none; d=google.com; s=arc-20160816; b=QQGhfJik4CoAYFNVinAvPERdRAxlDTjyFjR95x/nWUCLmGssC3RqnNxBkdjZUBj4sw pf2luWn/1c1K4W5X9A9s5l3enrR5kto714y2Ewbc1DMnTLX7G3LhO8PDFbB/p5MzJwnE Os9Lxi4O2Jpr5SjJySPOZC1s9B7gwJXJm9P4GMgShK8q9xNDNAZcIiMmOPklSnaYdbzY Kl+7MX+F6CuVLgyxlQgg7MipzljJwUumA9CiizPUxtJelmwsGDcAuICJdT/cuBm0WHD4 zS5+2qsqP1AZHtFHXFkbYMfMTzBRgVi7LCHlB3JnGasiJs2QnzJfii/vBgMFYIR/aaY3 US4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=KHddjm9SvmO326/A0Q7jULC0QAh5K2TYnQIugXYVvT8=; b=l2mYpxHliFiolh4cgv3yhsaWeW96FRAOc6crTj5Wnq17sTt24DOeOQBQKa/6gbi/7b ccjOzIkuEHUyxa/F/lN61pFmaW/ZCXUBjIunwXnbdLKIkgdPb0W0KRtj6BAoELVrkWQu YRwE2APJm2DShYK+Vk3yKIxFBFKoaiEUwsfhXMlegJmwsogHEDuNtSKX/Vfdp7OAERqR jAKHo10eW/VdNO+4ZbZxinK+5qCC2GXAfQ8qQiZXQApgXji7SJlM4tUXpDExNy3J42jF +AuDKegZ+Dl9GYzW0+NJIBQ/dj6E2R2eSMd9HriFDJex+zIeZRwlJGa2rZXsxKq00f4J ujUw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=No31MRJt; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c12-20020aa7c74c000000b005003a020e18si14120900eds.336.2023.03.22.07.38.44; Wed, 22 Mar 2023 07:39:07 -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=No31MRJt; 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 S231544AbjCVOdl (ORCPT + 99 others); Wed, 22 Mar 2023 10:33:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54570 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231357AbjCVOdf (ORCPT ); Wed, 22 Mar 2023 10:33:35 -0400 Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 303651E5E8 for ; Wed, 22 Mar 2023 07:33:06 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id b1-20020a17090a8c8100b002400db03706so376866pjo.0 for ; Wed, 22 Mar 2023 07:33:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1679495585; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=KHddjm9SvmO326/A0Q7jULC0QAh5K2TYnQIugXYVvT8=; b=No31MRJt5QhKgYPLLBEr35zF5an//OlzoWQKh4HjGAEjmmTvKuMSC8hmZO7gm33iXI 3pC58nrLgUtZdQGy/xrhYwrkA9OAt31qAhDKlEv4rqg9n6p7kwoDBuVO2pX6xyFgV8XR xvl3IoH7H2/i3YIsUq189uPfmzXC+eaaNgHuJIQAQ32QAFUUb9uQ5Mpu90XxQxGshhOn bl4aBMN9POFzjbhHHwoFWYhOF7dzCF6nRML3HNLEWHq/p/Fcph7t6Ff+HJr/7aDvvxwS Aw3thoKPZYSDZSI06mf0CKQ8kG0yiBZ3z47QvT9VVwtpixAzJ+VJ9fzrEr7K3uRmJfV1 TcQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679495585; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=KHddjm9SvmO326/A0Q7jULC0QAh5K2TYnQIugXYVvT8=; b=x37lYLA2H3M3eM8g+W5gcSG3B6tiZktanv2enbd3n+2zrTZ6n5yktsel1rT+CF3dd4 q7vrHq8Mt2V0XPmBpb2Yj+FMq58lyIAs9wgfRhAKHAuwruehlU8Yky2g1GRavtqxUH5M ROUu1mdWkYv0bv/K1SlsRV9pKofkupl6qzRBlbGKH5XpG6Xp38NvJ4Qcm1wSZFpVVhxq shGh1zNTCbFRAPW89PwV8wEcWf4tsTIv1DO7IkKntsiuHYU9AO9oMAZxiI3iE0o3RCM8 C3eRCV7pN/dMLbCysfGCnl5y7QtjGklPvFp5A2IKE235iCTHzjC22xaDMEMIvHVgef6N 4yRQ== X-Gm-Message-State: AAQBX9c5sWer4AEB/jromaaaY5jMkvHp1o5HsE9ej3pPkn9ArBf4mBZt ObZK/tOHhJOJaQ0XFYMKNLaWaZ/KWU4= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:90a:1f49:b0:236:a1f9:9a9d with SMTP id y9-20020a17090a1f4900b00236a1f99a9dmr970610pjy.2.1679495585023; Wed, 22 Mar 2023 07:33:05 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 22 Mar 2023 07:32:59 -0700 In-Reply-To: <20230322143300.2209476-1-seanjc@google.com> Mime-Version: 1.0 References: <20230322143300.2209476-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc2.332.ga46443480c-goog Message-ID: <20230322143300.2209476-2-seanjc@google.com> Subject: [PATCH 1/2] KVM: x86: Clear "has_error_code", not "error_code", for RM exception injection From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Maxim Levitsky X-Spam-Status: No, score=-7.7 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1761079143360948756?= X-GMAIL-MSGID: =?utf-8?q?1761079143360948756?= When injecting an exception into a vCPU in Real Mode, suppress the error code by clearing the flag that tracks whether the error code is valid, not by clearing the error code itself. The "typo" was introduced by recent fix for SVM's funky Paged Real Mode. Opportunistically hoist the logic above the tracepoint so that the trace is coherent with respect to what is actually injected (this was also the behavior prior to the buggy commit). Fixes: b97f07458373 ("KVM: x86: determine if an exception has an error code only when injecting it.") Cc: stable@vger.kernel.org Cc: Maxim Levitsky Signed-off-by: Sean Christopherson --- arch/x86/kvm/x86.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index f706621c35b8..e74aaf57eab5 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -9884,13 +9884,20 @@ int kvm_check_nested_events(struct kvm_vcpu *vcpu) static void kvm_inject_exception(struct kvm_vcpu *vcpu) { + /* + * Suppress the error code if the vCPU is in Real Mode, as Real Mode + * exceptions don't report error codes. The presence of an error code + * is carried with the exception and only stripped when the exception + * is injected as intercepted #PF VM-Exits for AMD's Paged Real Mode do + * report an error code despite the CPU being in Real Mode. + */ + vcpu->arch.exception.has_error_code &= is_protmode(vcpu); + trace_kvm_inj_exception(vcpu->arch.exception.vector, vcpu->arch.exception.has_error_code, vcpu->arch.exception.error_code, vcpu->arch.exception.injected); - if (vcpu->arch.exception.error_code && !is_protmode(vcpu)) - vcpu->arch.exception.error_code = false; static_call(kvm_x86_inject_exception)(vcpu); } From patchwork Wed Mar 22 14:33:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 73465 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:604a:0:0:0:0:0 with SMTP id j10csp2376708wrt; Wed, 22 Mar 2023 07:38:28 -0700 (PDT) X-Google-Smtp-Source: AK7set8pHOTOr/Oje+fKVyVbwfQFwQZLYmNzqUpaLSZ/OuNB1/de1ns4rf/6aqovWWQTr+nnLTa1 X-Received: by 2002:a17:906:7050:b0:932:e43f:7367 with SMTP id r16-20020a170906705000b00932e43f7367mr6597645ejj.35.1679495907877; Wed, 22 Mar 2023 07:38:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679495907; cv=none; d=google.com; s=arc-20160816; b=Fn5isZT/UMJKqZkvItOg4B1eBC9Rw9p0s9z58WJ/KIsqH3Fz/lHDxw6m+Em+Rx4yJ1 epqjugQrFrzXcSnlVHXaqN8dZLS8N0TORIcWYDOsenXSE4DwQVMWwmYw3KEtI8ik/Mna TAwk6H5YKgyLEDk4CNwPJbCuMr7xn6ryJw3JajMvNRbz0zY9TD7RkfDeV9MFJaQtzW3q HqF+mKuTCzmuctJrQldIm5bk/pk5YRdJkJFA8krgZ/MzUIO7Xl6J7mMFZCO/wZ6N+8sy 9JST1UFK68ItwVoqwDbGE/x19R/4L+BvDUcnrCAU7pIdMO/7q6oxEAWrNUfWyAM+1kA1 wX9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:reply-to:dkim-signature; bh=mgjRw2vqD776E+w9tuKRfXvdxK+3w2cB2jqd6fV4eR0=; b=n7nyuUk1Hd94ch+qrJ27+uYpNaF63BOxmBa0VP4tubIT4tfB6Y2aWEvTM+KYXAXkZF MQCaMr30TVs8AgCXRczBnYU2gvoDW+qdfS+fDvhEARMzf38dP4L1u6VJu2YCNabtsI1a KS+jyCUZNGo+xFxgqa4fSJl8KoF0oTr0i+/pzHUj3txL7yv514njz+iFRlyh28xO3N7R 1kup89JGL2W0ZbiDN7gTzJKlMGH7DQMTbZqi47qAtYK90gO02yA7rbmCackQSkGKvwYl 7GMhuglW6bV2s+Jh14A4qgqVrsIj49TzOiyL2dmJE3gVFSLuSKPXu/67OH6Zpm1Q4vEL 664Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=FxiRswSY; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c10-20020a170906170a00b00930913ad9d1si14631124eje.132.2023.03.22.07.38.03; Wed, 22 Mar 2023 07:38:27 -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=FxiRswSY; 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 S230163AbjCVOdp (ORCPT + 99 others); Wed, 22 Mar 2023 10:33:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54504 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231516AbjCVOdi (ORCPT ); Wed, 22 Mar 2023 10:33:38 -0400 Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7AFDE2203A for ; Wed, 22 Mar 2023 07:33:09 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id ml17-20020a17090b361100b0023f9e99ab95so4338810pjb.1 for ; Wed, 22 Mar 2023 07:33:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1679495587; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=mgjRw2vqD776E+w9tuKRfXvdxK+3w2cB2jqd6fV4eR0=; b=FxiRswSYb1AXIBDrqHHb62YcKg8xEq7PkbC7KXQ7NdhkfeEZgZkBHFtRMe84W7vbi/ c9yBkEX6F18CjW3HPfDWUj1sLu8tNsHSVW04tKegTIAyJPII8StZnlEb+Ze7hyDRzATQ BTC2i1j8vwKuJcvQzUnavrvLcnDoqVNaJVT4tw8gSdj36UuPOGf/o6OCInPoAPIUOXEG iQP5UMebXnVilFniWBBqMzZxsinYhckqC5FB9agMR2ZWhPIo5YsTjuSykkkUzyLT1NJn HGXMOnsJLUYBw/MBpU0vxAWU2MXhb1PnuhDNRC0APHyRywsrSga0bVAdmbHrMOH0pUbz tYGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679495587; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=mgjRw2vqD776E+w9tuKRfXvdxK+3w2cB2jqd6fV4eR0=; b=zrYYmIBV+SGkQGTmW+vus17kfaq4GzSgRWOFbSfBlT6/qE984wVwW/z2cWYfnwrfdu X6eyR1Hnk/VkFuheOo3IVTbY2TptmJ5AQXbqIIcuYk3HdhzK6qO6x8qQ6p8AR60crT4K 17AWV9FCIvJZLt+IGOWvM4xQAXBs+1NTDgBcp8X/MeXoQgw6Qytie5EzhyKEhg5jmccf K02lRQ6+QvlUzWXMOIDG821B9qRmSfoGIrMFf4DunahtUfL73t79gpu711+PPUQCHD+m KFEuHFbSP8047osU2WxeKOOD0u3w1le38cZdF1c91MGCGkuoxIuCYRToPuiFkmPFRzHo RrSw== X-Gm-Message-State: AO0yUKXlyWYY+CL1Xw9sLava2cxtsJgxJCR/v2LJ7WkkKuncxO2Igk1U kA5coesyqVX4OoivD5RducLTLsdNOlU= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a65:5082:0:b0:503:916f:3c99 with SMTP id r2-20020a655082000000b00503916f3c99mr833196pgp.10.1679495586826; Wed, 22 Mar 2023 07:33:06 -0700 (PDT) Reply-To: Sean Christopherson Date: Wed, 22 Mar 2023 07:33:00 -0700 In-Reply-To: <20230322143300.2209476-1-seanjc@google.com> Mime-Version: 1.0 References: <20230322143300.2209476-1-seanjc@google.com> X-Mailer: git-send-email 2.40.0.rc2.332.ga46443480c-goog Message-ID: <20230322143300.2209476-3-seanjc@google.com> Subject: [PATCH 2/2] KVM: nVMX: Do not report error code when synthesizing VM-Exit from Real Mode From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Maxim Levitsky X-Spam-Status: No, score=-7.7 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1761079101132737981?= X-GMAIL-MSGID: =?utf-8?q?1761079101132737981?= Don't report an error code to L1 when synthesizing a nested VM-Exit and L2 is in Real Mode. Per Intel's SDM, regarding the error code valid bit: This bit is always 0 if the VM exit occurred while the logical processor was in real-address mode (CR0.PE=0). The bug was introduced by a recent fix for AMD's Paged Real Mode, which moved the error code suppression from the common "queue exception" path to the "inject exception" path, but missed VMX's "synthesize VM-Exit" path. Fixes: b97f07458373 ("KVM: x86: determine if an exception has an error code only when injecting it.") Cc: stable@vger.kernel.org Cc: Maxim Levitsky Signed-off-by: Sean Christopherson --- arch/x86/kvm/vmx/nested.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c index 7c4f5ca405c7..14be92b3f34c 100644 --- a/arch/x86/kvm/vmx/nested.c +++ b/arch/x86/kvm/vmx/nested.c @@ -3868,7 +3868,12 @@ static void nested_vmx_inject_exception_vmexit(struct kvm_vcpu *vcpu) exit_qual = 0; } - if (ex->has_error_code) { + /* + * Unlike AMD's Paged Real Mode, which reports an error code on #PF + * VM-Exits even if the CPU is in Real Mode, Intel VMX never sets the + * "has error code" flags on VM-Exit if the CPU is in Real Mode. + */ + if (ex->has_error_code && is_protmode(vcpu)) { /* * Intel CPUs do not generate error codes with bits 31:16 set, * and more importantly VMX disallows setting bits 31:16 in the