From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8EA3AC43334 for ; Sat, 11 Jun 2022 00:58:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350559AbiFKA6p (ORCPT ); Fri, 10 Jun 2022 20:58:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56680 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347858AbiFKA6K (ORCPT ); Fri, 10 Jun 2022 20:58:10 -0400 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6EE1D69CD5 for ; Fri, 10 Jun 2022 17:58:09 -0700 (PDT) Received: by mail-pg1-x54a.google.com with SMTP id q8-20020a632a08000000b00402de053ef9so306529pgq.3 for ; Fri, 10 Jun 2022 17:58:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=oY9FxBNio0SCgLpK/jFKCD4Y7vKbbNfnGMEENFi2tNY=; b=rJlcqaygL9Pl8IWHX72a8GtxGllcsh7+hT6QUAaBK7gxlqJOxQSHJJBXNBpTMIwSZb sZD+8DU1ua+ccbHpWn/xOHXidemVVburKSy/zUsvFq+H907wCu1wnZBmCHu9t8vogofQ SybvseBX2yi+hv9YRIHFMV8olFdOEmPh1e6C+4JaFAu4Vwwf1NMda7a7LXUlns4VrR9Y 4lFE6tnbsIAI6+MgmqpdDCR5cGrVmJ+NNRENgt2jGQT/iRlNT3fFz8+rlYjJkdCApKCM QrpgKqA4rAnNcJf4KdToc5b4jsg6bX1kbqDn+WMe0+rxwP+1dRKdtNy9+ByvivH4gicH kiWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=oY9FxBNio0SCgLpK/jFKCD4Y7vKbbNfnGMEENFi2tNY=; b=WwXitbRLx+fM9VPQGCCRjSLj/pBCacpvVQt/f+Ofvkdfrt2CLGlYLI03n5lCDJIizj 4Pg4fiaz7iyAK7dyVmBsAY3i8jIkHOgw19LV9Y3blhSqFOjcP6+B22yrDKqh+m28gyF7 +FEmvQg7fmXQqLgift4cGom4g3pby4OPtpc6a8Nr3UUqU2ww2S+zNq+07Wz0fB2OiX/p 5hiUEwywdN8nsagMcRepmk/yuFLlTFHKSJ9+7Ems51DRPSoEJEMvIRhgkmBzv1HQ5sNt Ry7L1SujmVzwhkoLwqvkUsv0dWN2Npe+oN+v0cwCRnAiO3DIjmXHwzDnBpawYpt7pWF0 kjIA== X-Gm-Message-State: AOAM530V3l3VF0wXovKnMSL0P82QxLP3DZHYDhfVMDNdA2F4FqM7m2a8 AX9V7fMhaVlhkC56GMdHwZLdkT3hgmw= X-Google-Smtp-Source: ABdhPJwJ2J+Ef2pCi/IhSWV9HgKvMUa2SkTCU/3o5PPE6e/sBKhPhXF6Jg7Q0uJ5k3glRZJFOCqvmjVu/9Q= X-Received: from seanjc.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:3e5]) (user=seanjc job=sendgmr) by 2002:a05:6a00:1741:b0:51b:ca1a:8563 with SMTP id j1-20020a056a00174100b0051bca1a8563mr46208276pfc.58.1654909088824; Fri, 10 Jun 2022 17:58:08 -0700 (PDT) Reply-To: Sean Christopherson Date: Sat, 11 Jun 2022 00:57:54 +0000 In-Reply-To: <20220611005755.753273-1-seanjc@google.com> Message-Id: <20220611005755.753273-7-seanjc@google.com> Mime-Version: 1.0 References: <20220611005755.753273-1-seanjc@google.com> X-Mailer: git-send-email 2.36.1.476.g0c4daa206d-goog Subject: [PATCH 6/7] KVM: x86: Ignore benign host accesses to "unsupported" PEBS and BTS MSRs From: Sean Christopherson To: Paolo Bonzini Cc: Sean Christopherson , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Like Xu Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Ignore host userspace reads and writes of '0' to PEBS and BTS MSRs that KVM reports in the MSR-to-save list, but the MSRs are ultimately unsupported. All MSRs in said list must be writable by userspace, e.g. if userspace sends the list back at KVM without filtering out the MSRs it doesn't need. 8183a538cd95 ("KVM: x86/pmu: Add IA32_DS_AREA MSR emulation to support guest DS") 902caeb6841a ("KVM: x86/pmu: Add PEBS_DATA_CFG MSR emulation to support adaptive PEBS") c59a1f106f5c ("KVM: x86/pmu: Add IA32_PEBS_ENABLE MSR emulation for extended PEBS") Signed-off-by: Sean Christopherson --- arch/x86/kvm/x86.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 25f471adb8b8..655fb0b3bba4 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -3786,6 +3786,16 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) vcpu->arch.guest_fpu.xfd_err = data; break; #endif + case MSR_IA32_PEBS_ENABLE: + case MSR_IA32_DS_AREA: + case MSR_PEBS_DATA_CFG: + if (kvm_pmu_is_valid_msr(vcpu, msr)) + return kvm_pmu_set_msr(vcpu, msr_info); + /* + * Userspace is allowed to write '0' to MSRs that KVM reports + * as to-be-saved, even if an MSRs isn't fully supported. + */ + return !msr_info->host_initiated || data; default: if (kvm_pmu_is_valid_msr(vcpu, msr)) return kvm_pmu_set_msr(vcpu, msr_info); @@ -4122,6 +4132,16 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info) msr_info->data = vcpu->arch.guest_fpu.xfd_err; break; #endif + case MSR_IA32_PEBS_ENABLE: + case MSR_IA32_DS_AREA: + case MSR_PEBS_DATA_CFG: + if (kvm_pmu_is_valid_msr(vcpu, msr_info->index)) + return kvm_pmu_get_msr(vcpu, msr_info); + /* + * Userspace is allowed to read MSRs that KVM reports as + * to-be-saved, even if an MSR isn't fully supported. + */ + return !msr_info->host_initiated; default: if (kvm_pmu_is_valid_msr(vcpu, msr_info->index)) return kvm_pmu_get_msr(vcpu, msr_info); -- 2.36.1.476.g0c4daa206d-goog