Messages in this thread | | | From | Jim Mattson <> | Date | Tue, 9 Mar 2021 10:26:38 -0800 | Subject | Re: [PATCH v2] x86/perf: Use RET0 as default for guest_get_msrs to handle "no PMU" case |
| |
On Tue, Mar 9, 2021 at 9:10 AM Sean Christopherson <seanjc@google.com> wrote: > > 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 <like.xu@linux.intel.com> > Cc: Paolo Bonzini <pbonzini@redhat.com> > Cc: Jim Mattson <jmattson@google.com> > Reported-by: Dmitry Vyukov <dvyukov@google.com> > Reported-by: syzbot+cce9ef2dd25246f815ee@syzkaller.appspotmail.com > Suggested-by: Peter Zijlstra <peterz@infradead.org> > Signed-off-by: Sean Christopherson <seanjc@google.com> > --- > > 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"). > ... > 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. */
You could drop the scary comment with a profligate initialization of nr_msrs to 0.
[Apologies to those seeing this twice. I blame gmail.]
| |