Re: [PATCH v15 23/23] x86/sgx: Driver documentation

From: Jarkko Sakkinen
Date: Wed Nov 07 2018 - 11:30:32 EST


On Tue, Nov 06, 2018 at 08:45:37AM -0800, Dave Hansen wrote:
> On 11/5/18 9:49 PM, Jarkko Sakkinen wrote:
> > On Mon, Nov 05, 2018 at 12:27:11PM -0800, Dave Hansen wrote:
> >> The ABI seems entirely undocumented and rather lightly designed, which
> >> seems like something we should fix before this is merged.
> >
> > ABI is documented in arch/x86/include/uapi/asm/sgx.h that from which the
> > documentation is included to intel_sgx.rst. I'm not saying that there is
> > no space refine it but it is neither undocumented.
>
> I specifically mean the instruction flow around asynchronous exits or
> explicit enclave exit calls via EEXIT. Signals are part of the ABI but
> go unmentioned in the documentation.

Ok, thanks for clarification. We will document it.
>
> It's also worth noting that EENTER *can* act (from the kernel's
> perspective) like an instruction that both jumps and sets a bunch of
> registers (including %rsp). It's certainly abnormal in that regard.

Agreed.

> In fact, in the docs:
>
> > +Enclave can only execute code inside the ELRANGE. Instructions that may cause
> > +VMEXIT, IO instructions and instructions that require a privilege change are
> > +prohibited inside the enclave. Interrupts and exceptions always cause enclave
> > +to exit and jump to an address outside the enclave given when the enclave is
> > +entered by using the leaf instruction ENCLS(EENTER).
>
> it's probably a really good idea to explain that the address outside of
> the enclave is enclave-provided, and is not, for instance, just the next
> instruction after EENTER.
>
> >> Also, for a feature as massive and complicated as this one, it seems
> >> irresponsible to not have a selftest. Is that not feasible for some reason?
> >
> > I do have the in-kernel launch enclave stuff backed up here:
> >
> > https://github.com/jsakkine-intel/sgx-le-host
> > https://github.com/jsakkine-intel/sgx-le
> >
> > This is about as simple as it gets without any type of run-time.
>
> Does this code run when I type "make kselftest"? If not, I think we
> should rectify that.

No, it doesn't. It is just my backup for the non-SDK user space code
that I've made that I will use to fork my user space SGX projects in
the future.

I can work-out a selftest (and provide a new patch in the series) but
I'm still wondering what the enclave should do. I would suggest that
we start with an enclave that does just EEXIT and nothing else.

/Jarkko