From patchwork Sat Jul 29 01:15:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Christopherson X-Patchwork-Id: 127991 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp822666vqg; Fri, 28 Jul 2023 20:23:27 -0700 (PDT) X-Google-Smtp-Source: APBJJlGEZqX9VPTZ8GDeSd4d+wfQgFcBElegks8bvKy5m1cT8hw3CqOsibM9ztG6m+nD5lPOUroF X-Received: by 2002:a17:906:9bf0:b0:99b:d440:bf0c with SMTP id de48-20020a1709069bf000b0099bd440bf0cmr944027ejc.57.1690601007156; Fri, 28 Jul 2023 20:23:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690601007; cv=none; d=google.com; s=arc-20160816; b=jDas8jwd5M2Y1PSevAZu6PWuCgB8yjWqf4turDhe4AmHfIQ5b8pfwrxozJ4rgmOd8g 0YByuvrpBoPt+4O7Rkk7QYyGgye1xnauuzTqBBFMFg+luIgnKbJMUL/wVD1PTtwYr0jR r2h5n3gvhWZ69et3cS0EuaycLKIVd6jYde3ujddKseekhrxi0c2wY8UH7Lst9pre5yxD TT7rgwm6iZvtED35l67UDrqHVyrlVZlBDlZe24epMhN8sjHNfdjDTrO9hm0oY016K0Ig eAwHnvWl7qXelsTSKfJJv61JH2t31Pfbj2Y4CNgQU9YNXtFJG6FTPMlhuQG21Wa7kynE x1Tg== 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=OXHhc2U25Tn9jZSaAqLCulQOLba1UW3VXuih6bIvn0s=; fh=8Mc5uyvARtESo7rBGdZxKoor3rxsuqGYA/iIBYLTTUU=; b=aaqTQMo98uiK8JLPdDTZHALsd8qzHL//pNdxJe4Ant9zhjkEW0ZUqBwnsucA7P3TmO 81BlHgbqQWeV7cful9AwJ3txVHC4goE2iF1IYu4I6YMWNqsG2rdreb7SKCgGiuecJ8Qb SiLnOZyLBP+gD8/+MzAebjxHVG4e74pyKrz0yPYUoxWte3os39ynIAiBQ5X8mJoOw88k MUPnuy+H7v2Hlyq8y/RA2zoTSWkYnwWZCr31UooYeUvmL0rzvdScazHTEn25AOmp0XcK YLDG52/5PhQ3/pn112kUMU+XIgL88+PeGOXRg+7+TyuY92r4IH8WQogzAAQ1tN/YxXIf WTQQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=Tod3zMqU; 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 x23-20020a1709065ad700b00984f07f9bc1si3806466ejs.395.2023.07.28.20.23.03; Fri, 28 Jul 2023 20:23: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=20221208 header.b=Tod3zMqU; 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 S237189AbjG2BQR (ORCPT + 99 others); Fri, 28 Jul 2023 21:16:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35792 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233297AbjG2BQP (ORCPT ); Fri, 28 Jul 2023 21:16:15 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E116D3AA8 for ; Fri, 28 Jul 2023 18:16:14 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id d9443c01a7336-1bb982d2572so17448605ad.0 for ; Fri, 28 Jul 2023 18:16:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1690593374; x=1691198174; 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=OXHhc2U25Tn9jZSaAqLCulQOLba1UW3VXuih6bIvn0s=; b=Tod3zMqUpSYaMSjMntQET7ADtNMiYMgbBq1at6tAEQOFQg+AzH1AB/EPsntvDm5vNj EIG9W/6ReBz3I+JF0tX8SPTOlSXnEzx9ES1GjZQ1n/MoCOi0fTE2yochXFZoYOjwC6mc U3t5LNtMvj5DqqX4aJ80m3rhTwam3UPQTo2VgxfpkXQkLR7j/mmDbfm7nz5BPfC0DIRw ipi5tkLT3PhkVV1UrAy//YPPYzAiTfYSNf2NW4oExuekrUxEKRzNGrgzOAYZyTstIeTY SHF0J2p3TR7x0+vKZfwMp/3jlFMAB27g/khgrIS61KbP9aelsIKxNogzIgGACNWWhEod n7PQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690593374; x=1691198174; 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=OXHhc2U25Tn9jZSaAqLCulQOLba1UW3VXuih6bIvn0s=; b=MdSZurcqWqPKUmhl2gRiJSDWFWjldXNj1mj9LGbqQ7BRa3kIDyssRrDrATY1UqI8hF EkIcvXdCCooHyNh0cYdyGPzUI9oOEZw/l4D0JXA46h91B9yrwOTKyzpwJgktKEi09UZA Ms5RPJRaULrbXPiHRxaaXyA+PNLmEBNaD4GEBGwQsO4IjowRukFGBS29AVfDExq3e2Wc Y9W8Ma/Yl2LPen+XRre3mbUsk3wB7KnFt1No5cmdybFd8a1SIH023v1cl+kt7DS/hwxM gEfw8YezfuKByIF1JSVkjv/bvDxy3GXyr9/QHlDNPgIlrE/gUsPfSLLczgmCVxCad4Fx viKw== X-Gm-Message-State: ABy/qLZ5JZLfvWIzTKd2MCJcwddXTcRavSWODfBaHGeNPRnnS/bpG4QG RrF123MZ3UZ+u1lkchDqT8bNghfkDz8= X-Received: from zagreus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:5c37]) (user=seanjc job=sendgmr) by 2002:a17:902:e74b:b0:1b8:a56e:1dcc with SMTP id p11-20020a170902e74b00b001b8a56e1dccmr11826plf.13.1690593374418; Fri, 28 Jul 2023 18:16:14 -0700 (PDT) Reply-To: Sean Christopherson Date: Fri, 28 Jul 2023 18:15:48 -0700 In-Reply-To: <20230729011608.1065019-1-seanjc@google.com> Mime-Version: 1.0 References: <20230729011608.1065019-1-seanjc@google.com> X-Mailer: git-send-email 2.41.0.487.g6d72f3e995-goog Message-ID: <20230729011608.1065019-2-seanjc@google.com> Subject: [PATCH v2 01/21] KVM: nSVM: Check instead of asserting on nested TSC scaling support From: Sean Christopherson To: Sean Christopherson , Paolo Bonzini , Vitaly Kuznetsov Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Maxim Levitsky X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,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: INBOX X-GMAIL-THRID: 1772723641860870502 X-GMAIL-MSGID: 1772723641860870502 Check for nested TSC scaling support on nested SVM VMRUN instead of asserting that TSC scaling is exposed to L1 if L1's MSR_AMD64_TSC_RATIO has diverged from KVM's default. Userspace can trigger the WARN at will by writing the MSR and then updating guest CPUID to hide the feature (modifying guest CPUID is allowed anytime before KVM_RUN). E.g. hacking KVM's state_test selftest to do vcpu_set_msr(vcpu, MSR_AMD64_TSC_RATIO, 0); vcpu_clear_cpuid_feature(vcpu, X86_FEATURE_TSCRATEMSR); after restoring state in a new VM+vCPU yields an endless supply of: ------------[ cut here ]------------ WARNING: CPU: 164 PID: 62565 at arch/x86/kvm/svm/nested.c:699 nested_vmcb02_prepare_control+0x3d6/0x3f0 [kvm_amd] Call Trace: enter_svm_guest_mode+0x114/0x560 [kvm_amd] nested_svm_vmrun+0x260/0x330 [kvm_amd] vmrun_interception+0x29/0x30 [kvm_amd] svm_invoke_exit_handler+0x35/0x100 [kvm_amd] svm_handle_exit+0xe7/0x180 [kvm_amd] kvm_arch_vcpu_ioctl_run+0x1eab/0x2570 [kvm] kvm_vcpu_ioctl+0x4c9/0x5b0 [kvm] __se_sys_ioctl+0x7a/0xc0 __x64_sys_ioctl+0x21/0x30 do_syscall_64+0x41/0x90 entry_SYSCALL_64_after_hwframe+0x63/0xcd RIP: 0033:0x45ca1b Note, the nested #VMEXIT path has the same flaw, but needs a different fix and will be handled separately. Fixes: 5228eb96a487 ("KVM: x86: nSVM: implement nested TSC scaling") Cc: Maxim Levitsky Cc: stable@vger.kernel.org Signed-off-by: Sean Christopherson --- arch/x86/kvm/svm/nested.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/arch/x86/kvm/svm/nested.c b/arch/x86/kvm/svm/nested.c index 96936ddf1b3c..0b90f5cf9df3 100644 --- a/arch/x86/kvm/svm/nested.c +++ b/arch/x86/kvm/svm/nested.c @@ -695,10 +695,9 @@ static void nested_vmcb02_prepare_control(struct vcpu_svm *svm, vmcb02->control.tsc_offset = vcpu->arch.tsc_offset; - if (svm->tsc_ratio_msr != kvm_caps.default_tsc_scaling_ratio) { - WARN_ON(!svm->tsc_scaling_enabled); + if (svm->tsc_scaling_enabled && + svm->tsc_ratio_msr != kvm_caps.default_tsc_scaling_ratio) nested_svm_update_tsc_ratio_msr(vcpu); - } vmcb02->control.int_ctl = (svm->nested.ctl.int_ctl & int_ctl_vmcb12_bits) |