Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp2719273pxb; Tue, 9 Mar 2021 09:12:14 -0800 (PST) X-Google-Smtp-Source: ABdhPJz5f0yh3/oN+tUrDbOh0xVfyw0+OlZZnhyYytT1jV04GnVqLSHKl6oTYXLkGftbWjQFE/fY X-Received: by 2002:aa7:c496:: with SMTP id m22mr5232464edq.292.1615309934693; Tue, 09 Mar 2021 09:12:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1615309934; cv=none; d=google.com; s=arc-20160816; b=vbG+BcarsyEpc66pUjjCAY8AFTH708ZbN+F9HhL0bKH9gQv6gGz6BLuYrzTHO27E+X 43nkl40zvL77Xn5t2Labf/Q1aqYRXaEoD3aW8W8L/chaMWARTce9/HLK8ist9iVV032A 2EbUk82+1wwYg8jRy1wxAYCHlcQc2Zd3nQmuYP4pCkRdNSUAR2eb51jyQH7VmA2Pjjn2 49gYcVmYgreAhi96AQASeR0RV8+uh5MfqtoDQohvOnlsgbF3olPBHyUKCy1fJnTAEdZS 7rf22xjR6EJOj75slbkGitKHRUgKuz3o3cgP42yVRSR+noYnhC3lht4tvZoCe01x9ebM vSdw== 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:mime-version:message-id:date :reply-to:sender:dkim-signature; bh=DoRgiyLjNklM6rtntPUZIImM3ULIR10XzAP+GnWM3ms=; b=Yg4QKcIP4WAnwejYPawS2JgK0jrnr4kc/5NKkAuffV2JZeP/ZhOimH9ThuEhepcHwX R7iq8X/yzi8/oPpa6E04XClVB8UP4VHPOAIcs27E+CitGsSISq8JidrXAXMz6MSSR+5r 8tijEOe+N42CgqqhFyqYPFSwJUitYMKfniO92P3K7guRQt5/bsUQhlaVOA4uS0bn7MIk IYIFLfX/hXNg22GB+Bg7/dh+TO2lnm0wOlgtxYi9RLS4PBymu3bCwOfHy37cPqLTkPLW ngeG7dcb18sr20afs5YIiqRhGSviSaPzmOA6ck3+qxelL4iXMTU8fzjUdvVzPLO0vwso 9LJA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=jFhPiOfq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g21si9183551ejf.645.2021.03.09.09.11.51; Tue, 09 Mar 2021 09:12:14 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=jFhPiOfq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S230504AbhCIRKw (ORCPT + 99 others); Tue, 9 Mar 2021 12:10:52 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37370 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230397AbhCIRK1 (ORCPT ); Tue, 9 Mar 2021 12:10:27 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 33CDAC06174A for ; Tue, 9 Mar 2021 09:10:27 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id u1so17863420ybu.14 for ; Tue, 09 Mar 2021 09:10:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=sender:reply-to:date:message-id:mime-version:subject:from:to:cc; bh=DoRgiyLjNklM6rtntPUZIImM3ULIR10XzAP+GnWM3ms=; b=jFhPiOfq/F44oTP4XYhhXZGvFEC5azXnCZH7dJWpHw1NutprxD5MKr8aXhx4dZgsfp N8aNwN1P6Hh2br5dchmerKJXmsuj3c1YFzX7ftRqXdUngf1SrqNsYwTxKAYyFKtyz9Zb lHTE3jdBXC6amjPxtjswpxEpXAjvcdT8Ly3tpMhLMhBfS5q+GuPjkOjf+99KuN2HKi0q 3FyQs0KHmAWGrj6BSngs6oc3g2AAlXJC7dS+uROeBAcRxrrg4epyk5nNsAnRtUaEk8AP FurA1Lbd1Yi5LjuwFE5i+465qyid0YtqpWB4FGswR9T69qa1Sjid82hs7vKawfOUOlS3 Iaqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:reply-to:date:message-id:mime-version :subject:from:to:cc; bh=DoRgiyLjNklM6rtntPUZIImM3ULIR10XzAP+GnWM3ms=; b=WXWdxjIkl0GSQSSQiHPp4rf3u/lMNGjxouia/24Az48PA3fO5W/hnW5RF7+KnND6/N GP/dlBQYPFCDxP9SRhqVOhTsO+bZEppFUJxPAyj/umkEmo1ymj9rMZLxGEyz4P7q4GeY IElRRKWs0OQkhR4QjnifgBiBzxpssoBGX2hhw0do6p/wFCOUtBmsbeZKxjAxr1WVpiN5 VliWyl8Uo/dpnYEDK7Kc1BjsB4N5Q/3cJL61HNo6B3jEiKtOW/567XWQ034dIQ3TwoYN XhMHlS6LZ4marEWSb+mGZ632ULoLhDcKfathXCfenHIKO8jDqbnRql/Ka+HAA/8P9Paw oYgA== X-Gm-Message-State: AOAM531gV3aV/eO0fRvAVNzfiSpB1O7/h63PXYiBnnK5gRvls4aUn/ZB 7+odivK7Ggdmt+y3xxInAvYBxhtH5tk= Sender: "seanjc via sendgmr" X-Received: from seanjc798194.pdx.corp.google.com ([2620:15c:f:10:8:847a:d8b5:e2cc]) (user=seanjc job=sendgmr) by 2002:a25:bfc1:: with SMTP id q1mr39194688ybm.89.1615309826442; Tue, 09 Mar 2021 09:10:26 -0800 (PST) Reply-To: Sean Christopherson Date: Tue, 9 Mar 2021 09:10:19 -0800 Message-Id: <20210309171019.1125243-1-seanjc@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.30.1.766.gb4fecdf3b7-goog Subject: [PATCH v2] x86/perf: Use RET0 as default for guest_get_msrs to handle "no PMU" case From: Sean Christopherson To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Thomas Gleixner , Borislav Petkov , x86@kernel.org, Paolo Bonzini Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , "H. Peter Anvin" , Sean Christopherson , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Like Xu , Dmitry Vyukov , syzbot+cce9ef2dd25246f815ee@syzkaller.appspotmail.com Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Initialize x86_pmu.guest_get_msrs to return 0/NULL to handle the "nop" case. Patching in perf_guest_get_msrs_nop() during setup does not work if there is no PMU, as setup bails before updating the static calls, leaving x86_pmu.guest_get_msrs NULL and thus a complete nop. Ultimately, this causes VMX abort on VM-Exit due to KVM putting random garbage from the stack into the MSR load list. Add a comment in KVM to note that nr_msrs is valid if and only if the return value is non-NULL. Fixes: abd562df94d1 ("x86/perf: Use static_call for x86_pmu.guest_get_msrs") Cc: Like Xu Cc: Paolo Bonzini Cc: Jim Mattson Reported-by: Dmitry Vyukov Reported-by: syzbot+cce9ef2dd25246f815ee@syzkaller.appspotmail.com Suggested-by: Peter Zijlstra Signed-off-by: Sean Christopherson --- v2: - Use __static_call_return0 to return NULL instead of manually checking the hook at invocation. [Peter] - Rebase to tip/sched/core, commit 4117cebf1a9f ("psi: Optimize task switch inside shared cgroups"). arch/x86/events/core.c | 16 +++++----------- arch/x86/kvm/vmx/vmx.c | 2 +- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c index 6ddeed3cd2ac..7bb056151ecc 100644 --- a/arch/x86/events/core.c +++ b/arch/x86/events/core.c @@ -81,7 +81,11 @@ DEFINE_STATIC_CALL_NULL(x86_pmu_swap_task_ctx, *x86_pmu.swap_task_ctx); DEFINE_STATIC_CALL_NULL(x86_pmu_drain_pebs, *x86_pmu.drain_pebs); DEFINE_STATIC_CALL_NULL(x86_pmu_pebs_aliases, *x86_pmu.pebs_aliases); -DEFINE_STATIC_CALL_NULL(x86_pmu_guest_get_msrs, *x86_pmu.guest_get_msrs); +/* + * This one is magic, it will get called even when PMU init fails (because + * there is no PMU), in which case it should simply return NULL. + */ +DEFINE_STATIC_CALL_RET0(x86_pmu_guest_get_msrs, *x86_pmu.guest_get_msrs); u64 __read_mostly hw_cache_event_ids [PERF_COUNT_HW_CACHE_MAX] @@ -1944,13 +1948,6 @@ static void _x86_pmu_read(struct perf_event *event) x86_perf_event_update(event); } -static inline struct perf_guest_switch_msr * -perf_guest_get_msrs_nop(int *nr) -{ - *nr = 0; - return NULL; -} - static int __init init_hw_perf_events(void) { struct x86_pmu_quirk *quirk; @@ -2024,9 +2021,6 @@ static int __init init_hw_perf_events(void) if (!x86_pmu.read) x86_pmu.read = _x86_pmu_read; - if (!x86_pmu.guest_get_msrs) - x86_pmu.guest_get_msrs = perf_guest_get_msrs_nop; - x86_pmu_static_call_update(); /* diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 50810d471462..32cf8287d4a7 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -6580,8 +6580,8 @@ static void atomic_switch_perf_msrs(struct vcpu_vmx *vmx) int i, nr_msrs; struct perf_guest_switch_msr *msrs; + /* Note, nr_msrs may be garbage if perf_guest_get_msrs() returns NULL. */ msrs = perf_guest_get_msrs(&nr_msrs); - if (!msrs) return; -- 2.30.1.766.gb4fecdf3b7-goog