Messages in this thread | | | From | Jethro Beekman <> | Subject | Re: [RFC PATCH v4 5/5] x86/vdso: Add __vdso_sgx_enter_enclave() to wrap SGX enclave transitions | Date | Fri, 14 Dec 2018 09:55:49 +0000 |
| |
On 2018-12-14 03:01, Sean Christopherson wrote: > +struct sgx_enclave_regs { > + __u64 rdi; > + __u64 rsi; > + __u64 rdx; > + __u64 r8; > + __u64 r9; > + __u64 r10; > +};
This is fine, but why not just cover all 13 normal registers that are not used by SGX?
Minor comments below.
> +/** > + * struct sgx_enclave_exception - structure to pass register in/out of enclave
Typo in struct name.
> + * by way of __vdso_sgx_enter_enclave > + * > + * @rdi: value of %rdi, loaded/saved on enter/exit > + * @rsi: value of %rsi, loaded/saved on enter/exit > + * @rdx: value of %rdx, loaded/saved on enter/exit > + * @r8: value of %r8, loaded/saved on enter/exit > + * @r9: value of %r9, loaded/saved on enter/exit > + * @r10: value of %r10, loaded/saved on enter/exit > + */
> + /* load leaf, TCS and AEP for ENCLU */ > + mov %edi, %eax > + mov %rsi, %rbx > + lea 1f(%rip), %rcx
If you move this below the jump, you can use %rcx for @regs
> + > + /* optionally copy @regs to registers */ > + test %rdx, %rdx > + je 1f > + > + mov %rdx, %r11 > + mov RDI(%r11), %rdi > + mov RSI(%r11), %rsi > + mov RDX(%r11), %rdx > + mov R8(%r11), %r8 > + mov R9(%r11), %r9 > + mov R10(%r11), %r10 > + > +1: enclu > + > + /* ret = 0 */ > + xor %eax, %eax > + > + /* optionally copy registers to @regs */ > + mov -0x8(%rsp), %r11 > + test %r11, %r11 > + je 2f > + > + mov %rdi, RDI(%r11) > + mov %rsi, RSI(%r11) > + mov %rdx, RDX(%r11) > + mov %r8, R8(%r11) > + mov %r9, R9(%r11) > + mov %r10, R10(%r11)
Here you can use %rax for @regs and clear it at the end.
> +2: pop %rbx > + pop %r12 > + pop %r13 > + pop %r14 > + pop %r15 > + pop %rbp > + ret
x86-64 ABI requires that you call CLD here (enclave may set it).
-- Jethro Beekman | Fortanix
[unhandled content-type:application/pkcs7-signature] | |