linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Dave Hansen <dave.hansen@intel.com>
To: "Kuppuswamy,
	Sathyanarayanan"  <sathyanarayanan.kuppuswamy@linux.intel.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Andy Lutomirski <luto@kernel.org>
Cc: Andi Kleen <ak@linux.intel.com>,
	Kirill Shutemov <kirill.shutemov@linux.intel.com>,
	Kuppuswamy Sathyanarayanan <knsathya@kernel.org>,
	Dan Williams <dan.j.williams@intel.com>,
	Raj Ashok <ashok.raj@intel.com>,
	Sean Christopherson <seanjc@google.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 1/1] x86/tdx: Add __tdcall() and __tdvmcall() helper functions
Date: Tue, 20 Apr 2021 12:59:00 -0700	[thread overview]
Message-ID: <14332abf-c78c-3bc2-9a7c-ceacfa7a0661@intel.com> (raw)
In-Reply-To: <2a3f6b3d-cd80-0734-ce83-c067666c8326@linux.intel.com>

On 4/20/21 12:20 PM, Kuppuswamy, Sathyanarayanan wrote:
>>> approach is, it adds a few extra instructions for every
>>> TDCALL use case when compared to distributed checks. Although
>>> it's a bit less efficient, it's worth it to make the code more
>>> readable.
>>
>> What's a "distributed check"?
> 
> It should be "distributed TDVMCALL/TDCALL inline assembly calls"

It's still not clear to what that refers.

>> This also doesn't talk at all about why this approach was chosen versus
>> inline assembly.  You're going to be asked "why not use inline asm?"
> "To make the core more readable and less error prone." I have added this
> info in above paragraph. Do you think we need more argument to
> justify our approach?

Yes, you need much more justification.  That's pretty generic and
non-specific.

>>> +    /*
>>> +     * Expose R10 - R15, i.e. all GPRs that may be used by TDVMCALLs
>>> +     * defined in the GHCI.  Note, RAX and RCX are consumed, but
>>> only by
>>> +     * TDX-Module and so don't need to be listed in the mask.
>>> +     */
>>
>> "GCHI" is out of the blue here.  So is "TDX-Module".  There needs to be
>> more context.
> ok. will add it. Do you want GHCI spec reference with section id here?

Absolutely not.  I dislike all of the section references as-is.  Doesn't
a comment like this say what you said above and also add context?

	Expose every register currently used in the
	guest-to-host communication interface (GHCI).

>>> +    movl $TDVMCALL_EXPOSE_REGS_MASK, %ecx
>>> +
>>> +    tdcall
>>> +
>>> +    /* Panic if TDCALL reports failure. */
>>> +    test %rax, %rax
>>> +    jnz 2f
>>
>> Why panic?
> As per spec, TDCALL should never fail. Note that it has nothing to do
> with TDVMCALL function specific failure (which is reported via R10).

You've introduced two concepts here, without differentiating them.  You
need to work to differentiate these two kinds of failure somewhere.  You
can't simply refer to both as "failure".

>> Also, do you *REALLY* need to do this from assembly?  Can't it be done
>> in the C wrapper?
> Its common for all use cases of TDVMCALL (vendor specific, in/out, etc).
> so added
> it here.

That's not a good reason.  You could just as easily have a C wrapper
which all uses of TDVMCALL go through.

>>> +    /* Propagate TDVMCALL success/failure to return value. */
>>> +    mov %r10, %rax
>>
>> You just said it panic's on failure.  How can this propagate failure?
> we use panic for TDCALL failure. But, R10 content used to identify
> whether given
> TDVMCALL function operation is successful or not.

As I said above, please endeavor to differentiate the two classes of
failures.

Also, if the spec is violated, do you *REALLY* want to blow up the whole
world with a panic?  I guess you can argue that it could have been
something security-related that failed.  But, either way, you owe a
description of why panic'ing is a good idea, not just blindly deferring
to "the spec says this can't happen".

>>> +    xor %r10d, %r10d
>>> +    xor %r11d, %r11d
>>> +    xor %r12d, %r12d
>>> +    xor %r13d, %r13d
>>> +    xor %r14d, %r14d
>>> +    xor %r15d, %r15d
>>> +
>>> +    pop %r12
>>> +    pop %r13
>>> +    pop %r14
>>> +    pop %r15
>>> +
>>> +    FRAME_END
>>> +    ret
>>> +2:
>>> +    ud2
>>> +.endm
>>> +
>>> +SYM_FUNC_START(__tdvmcall)
>>> +    xor %r10, %r10
>>> +    tdvmcall_core
>>> +SYM_FUNC_END(__tdvmcall)
>>> diff --git a/arch/x86/kernel/tdx.c b/arch/x86/kernel/tdx.c
>>> index 0d00dd50a6ff..1147e7e765d6 100644
>>> --- a/arch/x86/kernel/tdx.c
>>> +++ b/arch/x86/kernel/tdx.c
>>> @@ -3,6 +3,36 @@
>>>     #include <asm/tdx.h>
>>>   +/*
>>> + * Wrapper for the common case with standard output value (R10).
>>> + */
>>
>> ... and oddly enough there is no explicit mention of R10 anywhere.  Why?
> For Guest to Host call -> R10 holds TDCALL function id (which is 0 for
> TDVMCALL). so
> we don't need special argument.
> After TDVMCALL execution, R10 value is returned via RAX.

OK... so this is how it works.  But why mention R10 in the comment?  Why
is *THAT* worth mentioning?

>>> +static inline u64 tdvmcall(u64 fn, u64 r12, u64 r13, u64 r14, u64 r15)
>>> +{
>>> +    u64 err;
>>> +
>>> +    err = __tdvmcall(fn, r12, r13, r14, r15, NULL);
>>> +
>>> +    WARN_ON(err);
>>> +
>>> +    return err;
>>> +}
>>
>> Are there really *ZERO* reasons for a TDVMCALL to return an error?
> No. Its useful for debugging TDVMCALL failures.
>> Won't this let a malicious VMM spew endless warnings into the guest
>> console?
> As per GHCI spec, R10 will hold error code details which can be used to
> determine
> the type of TDVMCALL failure.

I would encourage you to stop citing the GCCI spec.  In all of these
conversations, you seem to rely on it without considering the underlying
reasons.  The fact that R10 is the error code is 100% irrelevant for
this conversation.

It's also entirely possible that the host would have bugs, or forget to
clear a bit somewhere, even if the spec says, "don't do it".

> More warnings at-least show that we are working
> with malicious VMM.

That argument does not hold water for me.

You can argue that a counter can be kept, or that a WARN_ON_ONCE() is
appropriate, or that a printk_ratelimited() is nice.  But, allowing an
untrusted software component to write unlimited warnings to the kernel
console is utterly nonsensical.

By the same argument, any userspace exploit attempts could spew warnings
to the console also so that we can tell we are working with malicious
userspace.

>>> +/*
>>> + * Wrapper for the semi-common case where we need single output
>>> value (R11).
>>> + */
>>> +static inline u64 tdvmcall_out_r11(u64 fn, u64 r12, u64 r13, u64
>>> r14, u64 r15)
>>> +{
>>> +
>>> +    struct tdvmcall_output out = {0};
>>> +    u64 err;
>>> +
>>> +    err = __tdvmcall(fn, r12, r13, r14, r15, &out);
>>> +
>>> +    WARN_ON(err);
>>> +
>>> +    return out.r11;
>>> +}
>>> +
>>
>> But you introduced __tdvmcall and __tdcall assembly functions.  Why
>> aren't both of them used?
> This patch just adds helper functions. Its used by other patches in the
> series. __tdvmcall is used in this patch because we need to add more
> wrappers for it.

That needs to be mentioned in the changelog at least.

  reply	other threads:[~2021-04-20 19:59 UTC|newest]

Thread overview: 161+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-06  3:02 Test Email sathyanarayanan.kuppuswamy
2021-02-05 23:38 ` [RFC v1 00/26] Add TDX Guest Support Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 01/26] x86/paravirt: Introduce CONFIG_PARAVIRT_XL Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 02/26] x86/cpufeatures: Add TDX Guest CPU feature Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 03/26] x86/cpufeatures: Add is_tdx_guest() interface Kuppuswamy Sathyanarayanan
2021-04-01 21:08   ` Dave Hansen
2021-04-01 21:15     ` Kuppuswamy, Sathyanarayanan
2021-04-01 21:19       ` Dave Hansen
2021-04-01 22:25         ` Kuppuswamy, Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 04/26] x86/tdx: Get TD execution environment information via TDINFO Kuppuswamy Sathyanarayanan
2021-02-08 10:00   ` Peter Zijlstra
2021-02-08 19:10     ` Kuppuswamy, Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 05/26] x86/traps: Add #VE support for TDX guest Kuppuswamy Sathyanarayanan
2021-02-08 10:20   ` Peter Zijlstra
2021-02-08 16:23     ` Andi Kleen
2021-02-08 16:33       ` Peter Zijlstra
2021-02-08 16:46         ` Sean Christopherson
2021-02-08 16:59           ` Peter Zijlstra
2021-02-08 19:05             ` Kuppuswamy, Sathyanarayanan
2021-02-08 16:46         ` Andi Kleen
2021-02-12 19:20   ` Dave Hansen
2021-02-12 19:47   ` Andy Lutomirski
2021-02-12 20:06     ` Sean Christopherson
2021-02-12 20:17       ` Dave Hansen
2021-02-12 20:37         ` Sean Christopherson
2021-02-12 20:46           ` Dave Hansen
2021-02-12 20:54             ` Sean Christopherson
2021-02-12 21:06               ` Dave Hansen
2021-02-12 21:37                 ` Sean Christopherson
2021-02-12 21:47                   ` Andy Lutomirski
2021-02-12 21:48                     ` Dave Hansen
2021-02-14 19:33                       ` Andi Kleen
2021-02-14 19:54                         ` Andy Lutomirski
2021-02-12 20:20       ` Andy Lutomirski
2021-02-12 20:44         ` Sean Christopherson
2021-02-05 23:38 ` [RFC v1 06/26] x86/tdx: Add HLT " Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 07/26] x86/tdx: Wire up KVM hypercalls Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 08/26] x86/tdx: Add MSR support for TDX guest Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 09/26] x86/tdx: Handle CPUID via #VE Kuppuswamy Sathyanarayanan
2021-02-05 23:42   ` Andy Lutomirski
2021-02-07 14:13     ` Kirill A. Shutemov
2021-02-07 16:01       ` Dave Hansen
2021-02-07 20:29         ` Kirill A. Shutemov
2021-02-07 22:31           ` Dave Hansen
2021-02-07 22:45             ` Andy Lutomirski
2021-02-08 17:10               ` Sean Christopherson
2021-02-08 17:35                 ` Andy Lutomirski
2021-02-08 17:47                   ` Sean Christopherson
2021-03-18 21:30               ` [PATCH v1 1/1] x86/tdx: Add tdcall() and tdvmcall() helper functions Kuppuswamy Sathyanarayanan
2021-03-19 16:55                 ` Sean Christopherson
2021-03-19 17:42                   ` Kuppuswamy, Sathyanarayanan
2021-03-19 18:22                     ` Dave Hansen
2021-03-19 19:58                       ` Kuppuswamy, Sathyanarayanan
2021-03-26 23:38                         ` [PATCH v2 1/1] x86/tdx: Add __tdcall() and __tdvmcall() " Kuppuswamy Sathyanarayanan
2021-04-20 17:36                           ` Dave Hansen
2021-04-20 19:20                             ` Kuppuswamy, Sathyanarayanan
2021-04-20 19:59                               ` Dave Hansen [this message]
2021-04-20 23:12                                 ` Kuppuswamy, Sathyanarayanan
2021-04-20 23:42                                   ` Dave Hansen
2021-04-23  1:09                                     ` Kuppuswamy, Sathyanarayanan
2021-04-23  1:21                                       ` Dave Hansen
2021-04-23  1:35                                         ` Andi Kleen
2021-04-23 15:15                                           ` Sean Christopherson
2021-04-23 15:28                                             ` Dan Williams
2021-04-23 15:38                                               ` Andi Kleen
2021-04-23 15:50                                               ` Sean Christopherson
2021-04-23 15:47                                             ` Andi Kleen
2021-04-23 18:18                                             ` Kuppuswamy, Sathyanarayanan
2021-04-20 23:53                                   ` Dan Williams
2021-04-20 23:59                                     ` Kuppuswamy, Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 10/26] x86/io: Allow to override inX() and outX() implementation Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 11/26] x86/tdx: Handle port I/O Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 12/26] x86/tdx: Handle in-kernel MMIO Kuppuswamy Sathyanarayanan
2021-04-01 19:56   ` Dave Hansen
2021-04-01 22:26     ` Sean Christopherson
2021-04-01 22:53       ` Dave Hansen
2021-02-05 23:38 ` [RFC v1 13/26] x86/tdx: Handle MWAIT, MONITOR and WBINVD Kuppuswamy Sathyanarayanan
2021-02-05 23:43   ` Andy Lutomirski
2021-02-05 23:54     ` Kuppuswamy, Sathyanarayanan
2021-02-06  1:05       ` Andy Lutomirski
2021-03-27  0:18         ` [PATCH v1 1/1] " Kuppuswamy Sathyanarayanan
2021-03-27  2:40           ` Andy Lutomirski
2021-03-27  3:40             ` Kuppuswamy, Sathyanarayanan
2021-03-27 16:03               ` Andy Lutomirski
2021-03-27 22:54                 ` [PATCH v2 " Kuppuswamy Sathyanarayanan
2021-03-29 17:14                   ` Dave Hansen
2021-03-29 21:55                     ` Kuppuswamy, Sathyanarayanan
2021-03-29 22:02                       ` Dave Hansen
2021-03-29 22:09                         ` Kuppuswamy, Sathyanarayanan
2021-03-29 22:12                           ` Dave Hansen
2021-03-29 22:42                             ` Kuppuswamy, Sathyanarayanan
2021-03-29 23:16                             ` [PATCH v3 " Kuppuswamy Sathyanarayanan
2021-03-29 23:23                               ` Andy Lutomirski
2021-03-29 23:37                                 ` Kuppuswamy, Sathyanarayanan
2021-03-29 23:42                                   ` Sean Christopherson
2021-03-29 23:58                                     ` Andy Lutomirski
2021-03-30  2:04                                       ` Andi Kleen
2021-03-30  2:58                                         ` Andy Lutomirski
2021-03-30 15:14                                           ` Sean Christopherson
2021-03-30 16:37                                             ` Andy Lutomirski
2021-03-30 16:57                                               ` Sean Christopherson
2021-04-07 15:24                                                 ` Andi Kleen
2021-03-31 21:09                                           ` [PATCH v4 " Kuppuswamy Sathyanarayanan
2021-03-31 21:49                                             ` Dave Hansen
2021-03-31 22:29                                               ` Kuppuswamy, Sathyanarayanan
2021-03-31 21:53                                             ` Sean Christopherson
2021-03-31 22:00                                               ` Dave Hansen
2021-03-31 22:06                                                 ` Sean Christopherson
2021-03-31 22:11                                                   ` Dave Hansen
2021-03-31 22:28                                                     ` Kuppuswamy, Sathyanarayanan
2021-03-31 22:32                                                       ` Sean Christopherson
2021-03-31 22:34                                                       ` Dave Hansen
2021-04-01  3:28                                                         ` Andi Kleen
2021-04-01  3:46                                                           ` Dave Hansen
2021-04-01  4:24                                                             ` Andi Kleen
2021-04-01  4:51                                                               ` [PATCH v5 " Kuppuswamy Sathyanarayanan
2021-03-29 23:39                                 ` [PATCH v3 " Sean Christopherson
2021-03-29 23:38                               ` Dave Hansen
2021-03-30  4:56           ` [PATCH v1 " Xiaoyao Li
2021-03-30 15:00             ` Andi Kleen
2021-03-30 15:10               ` Dave Hansen
2021-03-30 17:02                 ` Kuppuswamy, Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 14/26] ACPI: tables: Add multiprocessor wake-up support Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 15/26] x86/boot: Add a trampoline for APs booting in 64-bit mode Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 16/26] x86/boot: Avoid #VE during compressed boot for TDX platforms Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 17/26] x86/boot: Avoid unnecessary #VE during boot process Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 18/26] x86/topology: Disable CPU hotplug support for TDX platforms Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 19/26] x86/tdx: Forcefully disable legacy PIC for TDX guests Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 20/26] x86/tdx: Introduce INTEL_TDX_GUEST config option Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 21/26] x86/mm: Move force_dma_unencrypted() to common code Kuppuswamy Sathyanarayanan
2021-04-01 20:06   ` Dave Hansen
2021-04-06 15:37     ` Kirill A. Shutemov
2021-04-06 16:11       ` Dave Hansen
2021-04-06 16:37         ` Kirill A. Shutemov
2021-02-05 23:38 ` [RFC v1 22/26] x86/tdx: Exclude Shared bit from __PHYSICAL_MASK Kuppuswamy Sathyanarayanan
2021-04-01 20:13   ` Dave Hansen
2021-04-06 15:54     ` Kirill A. Shutemov
2021-04-06 16:12       ` Dave Hansen
2021-02-05 23:38 ` [RFC v1 23/26] x86/tdx: Make pages shared in ioremap() Kuppuswamy Sathyanarayanan
2021-04-01 20:26   ` Dave Hansen
2021-04-06 16:00     ` Kirill A. Shutemov
2021-04-06 16:14       ` Dave Hansen
2021-02-05 23:38 ` [RFC v1 24/26] x86/tdx: Add helper to do MapGPA TDVMALL Kuppuswamy Sathyanarayanan
2021-02-05 23:38 ` [RFC v1 25/26] x86/tdx: Make DMA pages shared Kuppuswamy Sathyanarayanan
2021-04-01 21:01   ` Dave Hansen
2021-04-06 16:31     ` Kirill A. Shutemov
2021-04-06 16:38       ` Dave Hansen
2021-04-06 17:16         ` Sean Christopherson
2021-02-05 23:38 ` [RFC v1 26/26] x86/kvm: Use bounce buffers for TD guest Kuppuswamy Sathyanarayanan
2021-04-01 21:17   ` Dave Hansen
2021-02-06  3:04 ` Test Email sathyanarayanan.kuppuswamy
2021-02-06  6:24 ` [RFC v1 00/26] Add TDX Guest Support sathyanarayanan.kuppuswamy
2021-03-31 21:38 ` Kuppuswamy, Sathyanarayanan
2021-04-02  0:02 ` Dave Hansen
2021-04-02  2:48   ` Andi Kleen
2021-04-02 15:27     ` Dave Hansen
2021-04-02 21:32       ` Andi Kleen
2021-04-03 16:26         ` Dave Hansen
2021-04-03 17:28           ` Andi Kleen
2021-04-04 15:02 ` Dave Hansen
2021-04-12 17:24   ` Dan Williams

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=14332abf-c78c-3bc2-9a7c-ceacfa7a0661@intel.com \
    --to=dave.hansen@intel.com \
    --cc=ak@linux.intel.com \
    --cc=ashok.raj@intel.com \
    --cc=dan.j.williams@intel.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=knsathya@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=peterz@infradead.org \
    --cc=sathyanarayanan.kuppuswamy@linux.intel.com \
    --cc=seanjc@google.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).