From: Sean Christopherson <seanjc@google.com>
To: Borislav Petkov <bp@alien8.de>
Cc: Pavel Machek <pavel@denx.de>, Sasha Levin <sashal@kernel.org>,
linux-kernel@vger.kernel.org, stable@vger.kernel.org,
Max Grobecker <max@grobecker.info>,
Ingo Molnar <mingo@kernel.org>,
tglx@linutronix.de, mingo@redhat.com,
dave.hansen@linux.intel.com, x86@kernel.org,
thomas.lendacky@amd.com, perry.yuan@amd.com,
mario.limonciello@amd.com, riel@surriel.com, mjguzik@gmail.com,
darwi@linutronix.de, Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: CONFIG_X86_HYPERVISOR (was: Re: [PATCH AUTOSEL 5.10 2/6] x86/cpu: Don't clear X86_FEATURE_LAHF_LM flag in init_amd_k8() on AMD when running in a virtual machine)
Date: Fri, 25 Apr 2025 17:08:29 -0700 [thread overview]
Message-ID: <aAwj_Tkqj4GtywDe@google.com> (raw)
In-Reply-To: <20250424203110.GCaAqfjnr-fogRgnt7@renoirsky.local>
On Thu, Apr 24, 2025, Borislav Petkov wrote:
> On Thu, Apr 24, 2025 at 12:18:50PM -0700, Sean Christopherson wrote:
> > Not quite. KVM supports all of those seamlessly, with some caveats. E.g. if
> > host userspace and guest kernel are trying to use the same DRx, the guest will
> > "lose" and not get its #DBs.
>
> Pff, so cloud providers have big fat signs over their workstations
> saying: you're not allowed to use breakpoints on production systems?
Heh, it's a bit more than a sign.
> With my silly thinking, I'd prefer to reglement this more explicitly and
> actually have the kernel enforce policy:
The kernel already can enforce policy. Setting host breakpoints on guest code
is done through a dedicated ioctl(), and access to said ioctl() can be restricted
through various sandboxing methods, e.g. seccomp.
> HV userspace has higher prio with #DB or guests do. But the "losing" bit
> sounds weird and not nice.
Yeah, it's weird and not nice. But if a human is interactive debugging a guest,
odds are very, very good that a missing breakpoint in the guest is not at all a
concern.
> > Definitely not. All I was thinking was something like:
> >
> > diff --git a/arch/x86/include/asm/debugreg.h b/arch/x86/include/asm/debugreg.h
> > index fdbbbfec745a..a218c5170ecd 100644
> > --- a/arch/x86/include/asm/debugreg.h
> > +++ b/arch/x86/include/asm/debugreg.h
> > @@ -121,7 +121,7 @@ static __always_inline unsigned long local_db_save(void)
> > {
> > unsigned long dr7;
> >
> > - if (static_cpu_has(X86_FEATURE_HYPERVISOR) && !hw_breakpoint_active())
> > + if (static_cpu_has(X86_FEATURE_DRS_MAY_VMEXIT) && !hw_breakpoint_active())
> > return 0;
> >
> > get_debugreg(dr7, 7);
> >
> > Where X86_FEATURE_DRS_MAY_VMEXIT is set if HYPERVISOR is detected, but then
> > cleared by SEV-ES+ and TDX guests with guaranteed access to DRs. That said,
> > even that much infrastructure probably isn't worth the marginal benefits.
>
> Btw you can replace that X86_FEATURE_DRS_MAY_VMEXIT with a cc_platform
> flag which gets properly set on all those coco guest types as those
> flags are exactly for that stuff.
No, that would defeat the purpose of the check. The X86_FEATURE_HYPERVISOR has
nothing to do with correctness, it's all about performance. Critically, it's a
static check that gets patched at runtime. It's a micro-optimization for bare
metal to avoid a single cache miss (the __this_cpu_read(cpu_dr7)). Routing
through cc_platform_has() would be far, far heavier than calling hw_breakpoint_active().
I pointed out the SEV-ES+/TDX cases because they likely would benefit from that
same micro-optimization, i.e. by avoiding the call to hw_breakpoint_active().
next prev parent reply other threads:[~2025-04-26 0:08 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-31 14:37 [PATCH AUTOSEL 5.10 1/6] pm: cpupower: bench: Prevent NULL dereference on malloc failure Sasha Levin
2025-03-31 14:37 ` [PATCH AUTOSEL 5.10 2/6] x86/cpu: Don't clear X86_FEATURE_LAHF_LM flag in init_amd_k8() on AMD when running in a virtual machine Sasha Levin
2025-04-18 16:54 ` Pavel Machek
2025-04-18 17:19 ` Sean Christopherson
2025-04-18 17:36 ` Borislav Petkov
2025-04-18 18:31 ` Sean Christopherson
2025-04-18 19:12 ` Borislav Petkov
2025-04-22 17:22 ` Sean Christopherson
2025-04-22 17:33 ` CONFIG_X86_HYPERVISOR (was: Re: [PATCH AUTOSEL 5.10 2/6] x86/cpu: Don't clear X86_FEATURE_LAHF_LM flag in init_amd_k8() on AMD when running in a virtual machine) Borislav Petkov
2025-04-22 19:48 ` Sean Christopherson
2025-04-23 7:20 ` Borislav Petkov
2025-04-23 14:10 ` Sean Christopherson
2025-04-23 18:43 ` Borislav Petkov
2025-04-24 19:18 ` Sean Christopherson
2025-04-24 20:31 ` Borislav Petkov
2025-04-26 0:08 ` Sean Christopherson [this message]
2025-04-26 11:26 ` Borislav Petkov
2025-05-06 1:04 ` Sean Christopherson
2025-03-31 14:37 ` [PATCH AUTOSEL 5.10 3/6] perf: arm_pmu: Don't disable counter in armpmu_add() Sasha Levin
2025-03-31 14:37 ` [PATCH AUTOSEL 5.10 4/6] arm64: cputype: Add QCOM_CPU_PART_KRYO_3XX_GOLD Sasha Levin
2025-04-18 16:55 ` Pavel Machek
2025-04-18 19:27 ` Doug Anderson
2025-03-31 14:37 ` [PATCH AUTOSEL 5.10 5/6] xen/mcelog: Add __nonstring annotations for unterminated strings Sasha Levin
2025-03-31 14:37 ` [PATCH AUTOSEL 5.10 6/6] x86/mm/ident_map: Fix theoretical virtual address overflow to zero Sasha Levin
2025-04-18 16:52 ` [PATCH AUTOSEL 5.10 1/6] pm: cpupower: bench: Prevent NULL dereference on malloc failure Pavel Machek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aAwj_Tkqj4GtywDe@google.com \
--to=seanjc@google.com \
--cc=bp@alien8.de \
--cc=darwi@linutronix.de \
--cc=dave.hansen@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mario.limonciello@amd.com \
--cc=max@grobecker.info \
--cc=mingo@kernel.org \
--cc=mingo@redhat.com \
--cc=mjguzik@gmail.com \
--cc=pavel@denx.de \
--cc=pbonzini@redhat.com \
--cc=perry.yuan@amd.com \
--cc=riel@surriel.com \
--cc=sashal@kernel.org \
--cc=stable@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=thomas.lendacky@amd.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.