On Wed, Feb 26, 2025 at 06:18:46PM -0800, Sean Christopherson wrote: > Silently ignore attempts to switch to a paravirt sched_clock when running > as a CoCo guest with trusted TSC. In hand-wavy theory, a misbehaving > hypervisor could attack the guest by manipulating the PV clock to affect > guest scheduling in some weird and/or predictable way. More importantly, > reading TSC on such platforms is faster than any PV clock, and sched_clock > is all about speed. > > Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx> > --- > arch/x86/kernel/paravirt.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c > index a3a1359cfc26..c538c608d9fb 100644 > --- a/arch/x86/kernel/paravirt.c > +++ b/arch/x86/kernel/paravirt.c > @@ -89,6 +89,15 @@ DEFINE_STATIC_CALL(pv_sched_clock, native_sched_clock); > int __init __paravirt_set_sched_clock(u64 (*func)(void), bool stable, > void (*save)(void), void (*restore)(void)) > { > + /* > + * Don't replace TSC with a PV clock when running as a CoCo guest and > + * the TSC is secure/trusted; PV clocks are emulated by the hypervisor, > + * which isn't in the guest's TCB. > + */ > + if (cc_platform_has(CC_ATTR_GUEST_SNP_SECURE_TSC) || > + boot_cpu_has(X86_FEATURE_TDX_GUEST)) > + return -EPERM; > + Looks like a call for generic CC_ATTR_GUEST_SECURE_TSC that would be true for TDX and SEV with CC_ATTR_GUEST_SNP_SECURE_TSC. > if (!stable) > clear_sched_clock_stable(); > > -- > 2.48.1.711.g2feabab25a-goog > -- Kiryl Shutsemau / Kirill A. Shutemov