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