From: Cedric Xing <cedric.xing@intel.com> To: linux-sgx@vger.kernel.org Cc: cedric.xing@intel.com Subject: [RFC PATCH v1 2/3] x86/vdso: Modify __vdso_sgx_enter_enclave() to allow parameter passing on untrusted stack Date: Mon, 22 Apr 2019 13:42:58 -0700 [thread overview] Message-ID: <ba2a51568f3adaf74994d33ea3cbee570e20c6f6.1555965327.git.cedric.xing@intel.com> (raw) In-Reply-To: <cover.1555965327.git.cedric.xing@intel.com> In-Reply-To: <cover.1555965327.git.cedric.xing@intel.com> The previous __vdso_sgx_enter_enclave() requires enclaves to preserve %rsp, which prohibits enclaves from allocating and passing parameters for untrusted function calls (aka. o-calls). This patch addresses the problem above by introducing a new ABI that preserves %rbp instead of %rsp. Then __vdso_sgx_enter_enclave() can anchor its frame using %rbp so that enclaves are allowed to allocate space on the untrusted stack by decrementing %rsp. Please note that the stack space allocated in such way will be part of __vdso_sgx_enter_enclave()'s frame so will be freed after __vdso_sgx_enter_enclave() returns. Therefore, __vdso_sgx_enter_enclave() has been changed to take a callback function as an optional parameter, which if supplied, will be invoked upon enclave exits (both AEX (Asynchronous Enclave eXit) and normal exits), with the value of %rsp left off by the enclave as a parameter to the callback. Here's the summary of API/ABI changes in this patch. More details could be found in arch/x86/entry/vdso/vsgx_enter_enclave.S. * 'struct sgx_enclave_exception' is renamed to 'struct sgx_enclave_exinfo' because it is filled upon both AEX (i.e. exceptions) and normal enclave exits. * __vdso_sgx_enter_enclave() anchors its frame using %rbp (instead of %rsp in the previous implementation). * __vdso_sgx_enter_enclave() takes one more parameter - a callback function to be invoked upon enclave exits. This callback is optional, and if not supplied, will cause __vdso_sgx_enter_enclave() to return upon enclave exits (same behavior as previous implementation). * The callback function is given as a parameter the value of %rsp at enclave exit to address data "pushed" by the enclave. A positive value returned by the callback will be treated as an ENCLU leaf for re-entering the enclave, while a zero or negative value will be passed through as the return value of __vdso_sgx_enter_enclave() to its caller. It's also safe to leave callback by longjmp() or by throwing a C++ exception. Signed-off-by: Cedric Xing <cedric.xing@intel.com> --- arch/x86/entry/vdso/vsgx_enter_enclave.S | 156 ++++++++++++++--------- arch/x86/include/uapi/asm/sgx.h | 14 +- 2 files changed, 100 insertions(+), 70 deletions(-) diff --git a/arch/x86/entry/vdso/vsgx_enter_enclave.S b/arch/x86/entry/vdso/vsgx_enter_enclave.S index fe0bf6671d6d..210f4366374a 100644 --- a/arch/x86/entry/vdso/vsgx_enter_enclave.S +++ b/arch/x86/entry/vdso/vsgx_enter_enclave.S @@ -14,88 +14,118 @@ .code64 .section .text, "ax" -#ifdef SGX_KERNEL_DOC /** * __vdso_sgx_enter_enclave() - Enter an SGX enclave * * @leaf: **IN \%eax** - ENCLU leaf, must be EENTER or ERESUME - * @tcs: **IN \%rbx** - TCS, must be non-NULL - * @ex_info: **IN \%rcx** - Optional 'struct sgx_enclave_exception' pointer + * @tcs: **IN 0x08(\%rsp)** - TCS, must be non-NULL + * @ex_info: **IN 0x10(\%rsp)** - Optional 'struct sgx_enclave_exinfo' + * pointer + * @callback: **IN 0x18(\%rsp)** - Optional callback function to be called on + * enclave exit or exception * * Return: * **OUT \%eax** - - * %0 on a clean entry/exit to/from the enclave, %-EINVAL if ENCLU leaf is - * not allowed or if TCS is NULL, %-EFAULT if ENCLU or the enclave faults + * %0 on a clean entry/exit to/from the enclave, %-EINVAL if ENCLU leaf is not + * allowed, %-EFAULT if ENCLU or the enclave faults, or a non-positive value + * returned from ``callback`` (if one is supplied). * * **Important!** __vdso_sgx_enter_enclave() is **NOT** compliant with the - * x86-64 ABI, i.e. cannot be called from standard C code. As noted above, - * input parameters must be passed via ``%eax``, ``%rbx`` and ``%rcx``, with - * the return value passed via ``%eax``. All registers except ``%rsp`` must - * be treated as volatile from the caller's perspective, including but not - * limited to GPRs, EFLAGS.DF, MXCSR, FCW, etc... Conversely, the enclave - * being run **must** preserve the untrusted ``%rsp`` and stack. + * x86-64 ABI, i.e. cannot be called from standard C code. As noted above, + * input parameters must be passed via ``%eax``, ``8(%rsp)``, ``0x10(%rsp)`` and + * ``0x18(%rsp)``, with the return value passed via ``%eax``. All other registers + * will be passed through to the enclave as is. All registers except ``%rbp`` + * must be treated as volatile from the caller's perspective, including but not + * limited to GPRs, EFLAGS.DF, MXCSR, FCW, etc... Conversely, the enclave being + * run **must** preserve the untrusted ``%rbp``. + * + * ``callback`` has the following signature: + * int callback(long rdi, long rsi, long rdx, + * struct sgx_enclave_exinfo *ex_info, long r8, long r9, + * void *tcs, long ursp); + * ``callback`` **shall** follow x86_64 ABI. All GPRs **except** ``%rax``, ``%rbx`` + * and ``rcx`` are passed through to ``callback``. ``%rdi``, ``%rsi``, ``%rdx``, + * ``%r8``, ``%r9``, along with the value of ``%rsp`` when the enclave exited/excepted, + * can be accessed directly as input parameters, while other GPRs can be + * accessed in assembly if needed. + * A positive value returned from ``callback`` will be treated as an ENCLU leaf + * (e.g. EENTER/ERESUME) to reenter the enclave, while 0 or a negative return + * value will be passed back to the caller of __vdso_sgx_enter_enclave(). + * It is also **safe** to ``longjmp()`` out of ``callback``. */ -__vdso_sgx_enter_enclave(u32 leaf, void *tcs, - struct sgx_enclave_exception *ex_info) -{ - if (leaf != SGX_EENTER && leaf != SGX_ERESUME) - return -EINVAL; - - if (!tcs) - return -EINVAL; - - try { - ENCLU[leaf]; - } catch (exception) { - if (e) - *e = exception; - return -EFAULT; - } - - return 0; -} -#endif ENTRY(__vdso_sgx_enter_enclave) - /* EENTER <= leaf <= ERESUME */ + /* Prolog */ + .cfi_startproc + push %rbp + .cfi_adjust_cfa_offset 8 + .cfi_rel_offset %rbp, 0 + mov %rsp, %rbp + .cfi_def_cfa_register %rbp + +1: /* EENTER <= leaf <= ERESUME */ cmp $0x2, %eax - jb bad_input - + jb 6f cmp $0x3, %eax - ja bad_input + ja 6f - /* TCS must be non-NULL */ - test %rbx, %rbx - je bad_input + /* Load TCS and AEP */ + mov 0x10(%rbp), %rbx + lea 2f(%rip), %rcx - /* Save @exception_info */ - push %rcx - - /* Load AEP for ENCLU */ - lea 1f(%rip), %rcx -1: enclu - - add $0x8, %rsp - xor %eax, %eax - ret - -bad_input: - mov $(-EINVAL), %rax - ret - -.pushsection .fixup, "ax" - /* Re-load @exception_info and fill it (if it's non-NULL) */ -2: pop %rcx - test %rcx, %rcx - je 3f + /* Single ENCLU serving as both EENTER and AEP (ERESUME) */ +2: enclu + /* EEXIT path */ + xor %ebx, %ebx +3: mov 0x18(%rbp), %rcx + jrcxz 4f mov %eax, EX_LEAF(%rcx) - mov %di, EX_TRAPNR(%rcx) - mov %si, EX_ERROR_CODE(%rcx) + jnc 4f + mov %di, EX_TRAPNR(%rcx) + mov %si, EX_ERROR_CODE(%rcx) mov %rdx, EX_ADDRESS(%rcx) -3: mov $(-EFAULT), %rax + +4: /* Call *callback if supplied */ + mov 0x20(%rbp), %rax + test %rax, %rax + cmovz %rbx, %rax + jz 7f + /* Align stack and clear RFLAGS.DF per x86_64 ABI */ + mov %rsp, %rbx + and $-0x10, %rsp + cld + /* Parameters for *callback */ + push %rbx + push 0x10(%rbp) + /* Call via retpoline */ + call 40f + /* Cleanup stack */ + mov %rbx, %rsp + jmp 1b +40: /* retpoline */ + call 42f +41: pause + lfence + jmp 41b +42: mov %rax, (%rsp) + ret + +5: /* Exception path */ + mov $-EFAULT, %ebx + stc + jmp 3b + +6: /* Unsupported ENCLU leaf */ + cmp $0, %eax + jle 7f + mov $-EINVAL, %eax + +7: /* Epilog */ + leave + .cfi_def_cfa %rsp, 8 ret -.popsection + .cfi_endproc -_ASM_VDSO_EXTABLE_HANDLE(1b, 2b) +_ASM_VDSO_EXTABLE_HANDLE(2b, 5b) ENDPROC(__vdso_sgx_enter_enclave) diff --git a/arch/x86/include/uapi/asm/sgx.h b/arch/x86/include/uapi/asm/sgx.h index 9ed690a38c70..50d2b5143e5e 100644 --- a/arch/x86/include/uapi/asm/sgx.h +++ b/arch/x86/include/uapi/asm/sgx.h @@ -24,7 +24,7 @@ /** * struct sgx_enclave_create - parameter structure for the - * %SGX_IOC_ENCLAVE_CREATE ioctl + * %SGX_IOC_ENCLAVE_CREATE ioctl * @src: address for the SECS page data */ struct sgx_enclave_create { @@ -33,7 +33,7 @@ struct sgx_enclave_create { /** * struct sgx_enclave_add_page - parameter structure for the - * %SGX_IOC_ENCLAVE_ADD_PAGE ioctl + * %SGX_IOC_ENCLAVE_ADD_PAGE ioctl * @addr: address within the ELRANGE * @src: address for the page data * @secinfo: address for the SECINFO data @@ -49,7 +49,7 @@ struct sgx_enclave_add_page { /** * struct sgx_enclave_init - parameter structure for the - * %SGX_IOC_ENCLAVE_INIT ioctl + * %SGX_IOC_ENCLAVE_INIT ioctl * @sigstruct: address for the SIGSTRUCT data */ struct sgx_enclave_init { @@ -66,16 +66,16 @@ struct sgx_enclave_set_attribute { }; /** - * struct sgx_enclave_exception - structure to report exceptions encountered in - * __vdso_sgx_enter_enclave() + * struct sgx_enclave_exinfo - structure to report exceptions encountered in + * __vdso_sgx_enter_enclave() * - * @leaf: ENCLU leaf from \%eax at time of exception + * @leaf: ENCLU leaf from \%eax at time of exception/exit * @trapnr: exception trap number, a.k.a. fault vector * @error_code: exception error code * @address: exception address, e.g. CR2 on a #PF * @reserved: reserved for future use */ -struct sgx_enclave_exception { +struct sgx_enclave_exinfo { __u32 leaf; __u16 trapnr; __u16 error_code; -- 2.17.1
WARNING: multiple messages have this Message-ID (diff)
From: Cedric Xing <cedric.xing@intel.com> To: linux-kernel@vger.kernel.org, x86@kernel.org, linux-sgx@vger.kernel.org Cc: akpm@linux-foundation.org, Hansen@vger.kernel.org, Dave <dave.hansen@intel.com>, Christopherson@vger.kernel.org, Sean J <sean.j.christopherson@intel.com>, nhorman@redhat.com, npmccallum@redhat.com, Ayoun@vger.kernel.org, Serge <serge.ayoun@intel.com>, Katz-zamir@vger.kernel.org, Shay <shay.katz-zamir@intel.com>, Huang@vger.kernel.org, Haitao <haitao.huang@intel.com>, andriy.shevchenko@linux.intel.com, tglx@linutronix.de, Svahn@vger.kernel.org, Kai <kai.svahn@intel.com>, bp@alien8.de, josh@joshtriplett.org, luto@kernel.org, Kai <kai.huang@intel.com>, rientjes@google.com, Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>, Cedric Xing <cedric.xing@intel.com> Subject: [RFC PATCH v1 2/3] x86/vdso: Modify __vdso_sgx_enter_enclave() to allow parameter passing on untrusted stack Date: Mon, 22 Apr 2019 17:37:24 -0700 [thread overview] Message-ID: <ba2a51568f3adaf74994d33ea3cbee570e20c6f6.1555965327.git.cedric.xing@intel.com> (raw) Message-ID: <20190423003724.bQtECJ5Z3C1B9knsM7CY-q0nQ_o_5PLchmGtr050M6Y@z> (raw) In-Reply-To: <cover.1555965327.git.cedric.xing@intel.com> In-Reply-To: <cover.1555965327.git.cedric.xing@intel.com> The previous __vdso_sgx_enter_enclave() requires enclaves to preserve %rsp, which prohibits enclaves from allocating and passing parameters for untrusted function calls (aka. o-calls). This patch addresses the problem above by introducing a new ABI that preserves %rbp instead of %rsp. Then __vdso_sgx_enter_enclave() can anchor its frame using %rbp so that enclaves are allowed to allocate space on the untrusted stack by decrementing %rsp. Please note that the stack space allocated in such way will be part of __vdso_sgx_enter_enclave()'s frame so will be freed after __vdso_sgx_enter_enclave() returns. Therefore, __vdso_sgx_enter_enclave() has been changed to take a callback function as an optional parameter, which if supplied, will be invoked upon enclave exits (both AEX (Asynchronous Enclave eXit) and normal exits), with the value of %rsp left off by the enclave as a parameter to the callback. Here's the summary of API/ABI changes in this patch. More details could be found in arch/x86/entry/vdso/vsgx_enter_enclave.S. * 'struct sgx_enclave_exception' is renamed to 'struct sgx_enclave_exinfo' because it is filled upon both AEX (i.e. exceptions) and normal enclave exits. * __vdso_sgx_enter_enclave() anchors its frame using %rbp (instead of %rsp in the previous implementation). * __vdso_sgx_enter_enclave() takes one more parameter - a callback function to be invoked upon enclave exits. This callback is optional, and if not supplied, will cause __vdso_sgx_enter_enclave() to return upon enclave exits (same behavior as previous implementation). * The callback function is given as a parameter the value of %rsp at enclave exit to address data "pushed" by the enclave. A positive value returned by the callback will be treated as an ENCLU leaf for re-entering the enclave, while a zero or negative value will be passed through as the return value of __vdso_sgx_enter_enclave() to its caller. It's also safe to leave callback by longjmp() or by throwing a C++ exception. Signed-off-by: Cedric Xing <cedric.xing@intel.com> --- arch/x86/entry/vdso/vsgx_enter_enclave.S | 156 ++++++++++++++--------- arch/x86/include/uapi/asm/sgx.h | 14 +- 2 files changed, 100 insertions(+), 70 deletions(-) diff --git a/arch/x86/entry/vdso/vsgx_enter_enclave.S b/arch/x86/entry/vdso/vsgx_enter_enclave.S index fe0bf6671d6d..210f4366374a 100644 --- a/arch/x86/entry/vdso/vsgx_enter_enclave.S +++ b/arch/x86/entry/vdso/vsgx_enter_enclave.S @@ -14,88 +14,118 @@ .code64 .section .text, "ax" -#ifdef SGX_KERNEL_DOC /** * __vdso_sgx_enter_enclave() - Enter an SGX enclave * * @leaf: **IN \%eax** - ENCLU leaf, must be EENTER or ERESUME - * @tcs: **IN \%rbx** - TCS, must be non-NULL - * @ex_info: **IN \%rcx** - Optional 'struct sgx_enclave_exception' pointer + * @tcs: **IN 0x08(\%rsp)** - TCS, must be non-NULL + * @ex_info: **IN 0x10(\%rsp)** - Optional 'struct sgx_enclave_exinfo' + * pointer + * @callback: **IN 0x18(\%rsp)** - Optional callback function to be called on + * enclave exit or exception * * Return: * **OUT \%eax** - - * %0 on a clean entry/exit to/from the enclave, %-EINVAL if ENCLU leaf is - * not allowed or if TCS is NULL, %-EFAULT if ENCLU or the enclave faults + * %0 on a clean entry/exit to/from the enclave, %-EINVAL if ENCLU leaf is not + * allowed, %-EFAULT if ENCLU or the enclave faults, or a non-positive value + * returned from ``callback`` (if one is supplied). * * **Important!** __vdso_sgx_enter_enclave() is **NOT** compliant with the - * x86-64 ABI, i.e. cannot be called from standard C code. As noted above, - * input parameters must be passed via ``%eax``, ``%rbx`` and ``%rcx``, with - * the return value passed via ``%eax``. All registers except ``%rsp`` must - * be treated as volatile from the caller's perspective, including but not - * limited to GPRs, EFLAGS.DF, MXCSR, FCW, etc... Conversely, the enclave - * being run **must** preserve the untrusted ``%rsp`` and stack. + * x86-64 ABI, i.e. cannot be called from standard C code. As noted above, + * input parameters must be passed via ``%eax``, ``8(%rsp)``, ``0x10(%rsp)`` and + * ``0x18(%rsp)``, with the return value passed via ``%eax``. All other registers + * will be passed through to the enclave as is. All registers except ``%rbp`` + * must be treated as volatile from the caller's perspective, including but not + * limited to GPRs, EFLAGS.DF, MXCSR, FCW, etc... Conversely, the enclave being + * run **must** preserve the untrusted ``%rbp``. + * + * ``callback`` has the following signature: + * int callback(long rdi, long rsi, long rdx, + * struct sgx_enclave_exinfo *ex_info, long r8, long r9, + * void *tcs, long ursp); + * ``callback`` **shall** follow x86_64 ABI. All GPRs **except** ``%rax``, ``%rbx`` + * and ``rcx`` are passed through to ``callback``. ``%rdi``, ``%rsi``, ``%rdx``, + * ``%r8``, ``%r9``, along with the value of ``%rsp`` when the enclave exited/excepted, + * can be accessed directly as input parameters, while other GPRs can be + * accessed in assembly if needed. + * A positive value returned from ``callback`` will be treated as an ENCLU leaf + * (e.g. EENTER/ERESUME) to reenter the enclave, while 0 or a negative return + * value will be passed back to the caller of __vdso_sgx_enter_enclave(). + * It is also **safe** to ``longjmp()`` out of ``callback``. */ -__vdso_sgx_enter_enclave(u32 leaf, void *tcs, - struct sgx_enclave_exception *ex_info) -{ - if (leaf != SGX_EENTER && leaf != SGX_ERESUME) - return -EINVAL; - - if (!tcs) - return -EINVAL; - - try { - ENCLU[leaf]; - } catch (exception) { - if (e) - *e = exception; - return -EFAULT; - } - - return 0; -} -#endif ENTRY(__vdso_sgx_enter_enclave) - /* EENTER <= leaf <= ERESUME */ + /* Prolog */ + .cfi_startproc + push %rbp + .cfi_adjust_cfa_offset 8 + .cfi_rel_offset %rbp, 0 + mov %rsp, %rbp + .cfi_def_cfa_register %rbp + +1: /* EENTER <= leaf <= ERESUME */ cmp $0x2, %eax - jb bad_input - + jb 6f cmp $0x3, %eax - ja bad_input + ja 6f - /* TCS must be non-NULL */ - test %rbx, %rbx - je bad_input + /* Load TCS and AEP */ + mov 0x10(%rbp), %rbx + lea 2f(%rip), %rcx - /* Save @exception_info */ - push %rcx - - /* Load AEP for ENCLU */ - lea 1f(%rip), %rcx -1: enclu - - add $0x8, %rsp - xor %eax, %eax - ret - -bad_input: - mov $(-EINVAL), %rax - ret - -.pushsection .fixup, "ax" - /* Re-load @exception_info and fill it (if it's non-NULL) */ -2: pop %rcx - test %rcx, %rcx - je 3f + /* Single ENCLU serving as both EENTER and AEP (ERESUME) */ +2: enclu + /* EEXIT path */ + xor %ebx, %ebx +3: mov 0x18(%rbp), %rcx + jrcxz 4f mov %eax, EX_LEAF(%rcx) - mov %di, EX_TRAPNR(%rcx) - mov %si, EX_ERROR_CODE(%rcx) + jnc 4f + mov %di, EX_TRAPNR(%rcx) + mov %si, EX_ERROR_CODE(%rcx) mov %rdx, EX_ADDRESS(%rcx) -3: mov $(-EFAULT), %rax + +4: /* Call *callback if supplied */ + mov 0x20(%rbp), %rax + test %rax, %rax + cmovz %rbx, %rax + jz 7f + /* Align stack and clear RFLAGS.DF per x86_64 ABI */ + mov %rsp, %rbx + and $-0x10, %rsp + cld + /* Parameters for *callback */ + push %rbx + push 0x10(%rbp) + /* Call via retpoline */ + call 40f + /* Cleanup stack */ + mov %rbx, %rsp + jmp 1b +40: /* retpoline */ + call 42f +41: pause + lfence + jmp 41b +42: mov %rax, (%rsp) + ret + +5: /* Exception path */ + mov $-EFAULT, %ebx + stc + jmp 3b + +6: /* Unsupported ENCLU leaf */ + cmp $0, %eax + jle 7f + mov $-EINVAL, %eax + +7: /* Epilog */ + leave + .cfi_def_cfa %rsp, 8 ret -.popsection + .cfi_endproc -_ASM_VDSO_EXTABLE_HANDLE(1b, 2b) +_ASM_VDSO_EXTABLE_HANDLE(2b, 5b) ENDPROC(__vdso_sgx_enter_enclave) diff --git a/arch/x86/include/uapi/asm/sgx.h b/arch/x86/include/uapi/asm/sgx.h index 9ed690a38c70..50d2b5143e5e 100644 --- a/arch/x86/include/uapi/asm/sgx.h +++ b/arch/x86/include/uapi/asm/sgx.h @@ -24,7 +24,7 @@ /** * struct sgx_enclave_create - parameter structure for the - * %SGX_IOC_ENCLAVE_CREATE ioctl + * %SGX_IOC_ENCLAVE_CREATE ioctl * @src: address for the SECS page data */ struct sgx_enclave_create { @@ -33,7 +33,7 @@ struct sgx_enclave_create { /** * struct sgx_enclave_add_page - parameter structure for the - * %SGX_IOC_ENCLAVE_ADD_PAGE ioctl + * %SGX_IOC_ENCLAVE_ADD_PAGE ioctl * @addr: address within the ELRANGE * @src: address for the page data * @secinfo: address for the SECINFO data @@ -49,7 +49,7 @@ struct sgx_enclave_add_page { /** * struct sgx_enclave_init - parameter structure for the - * %SGX_IOC_ENCLAVE_INIT ioctl + * %SGX_IOC_ENCLAVE_INIT ioctl * @sigstruct: address for the SIGSTRUCT data */ struct sgx_enclave_init { @@ -66,16 +66,16 @@ struct sgx_enclave_set_attribute { }; /** - * struct sgx_enclave_exception - structure to report exceptions encountered in - * __vdso_sgx_enter_enclave() + * struct sgx_enclave_exinfo - structure to report exceptions encountered in + * __vdso_sgx_enter_enclave() * - * @leaf: ENCLU leaf from \%eax at time of exception + * @leaf: ENCLU leaf from \%eax at time of exception/exit * @trapnr: exception trap number, a.k.a. fault vector * @error_code: exception error code * @address: exception address, e.g. CR2 on a #PF * @reserved: reserved for future use */ -struct sgx_enclave_exception { +struct sgx_enclave_exinfo { __u32 leaf; __u16 trapnr; __u16 error_code; -- 2.17.1
next prev parent reply other threads:[~2019-04-22 20:43 UTC|newest] Thread overview: 318+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-04-17 10:39 [PATCH v20 00/28] Intel SGX1 support Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 01/28] x86/cpufeatures: Add Intel-defined SGX feature bit Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 02/28] x86/cpufeatures: Add SGX sub-features (as Linux-defined bits) Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 03/28] x86/msr: Add IA32_FEATURE_CONTROL.SGX_ENABLE definition Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 04/28] x86/cpufeatures: Add Intel-defined SGX_LC feature bit Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 05/28] x86/msr: Add SGX Launch Control MSR definitions Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 06/28] x86/mm: x86/sgx: Add new 'PF_SGX' page fault error code bit Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 07/28] x86/mm: x86/sgx: Signal SIGSEGV for userspace #PFs w/ PF_SGX Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 08/28] x86/cpu/intel: Detect SGX support and update caps appropriately Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 09/28] x86/sgx: Add ENCLS architectural error codes Jarkko Sakkinen 2019-04-22 21:35 ` Sean Christopherson 2019-04-17 10:39 ` [PATCH v20 10/28] x86/sgx: Add SGX1 and SGX2 architectural data structures Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 11/28] x86/sgx: Add wrappers for ENCLS leaf functions Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 12/28] x86/sgx: Enumerate and track EPC sections Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 13/28] x86/sgx: Add functions to allocate and free EPC pages Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 14/28] x86/sgx: Add sgx_einit() for initializing enclaves Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 15/28] x86/sgx: Add the Linux SGX Enclave Driver Jarkko Sakkinen 2019-04-22 21:58 ` Sean Christopherson 2019-04-23 23:29 ` Jethro Beekman 2019-04-24 0:26 ` Sean Christopherson 2019-04-24 1:04 ` Jethro Beekman 2019-04-29 19:08 ` Sean Christopherson 2019-06-04 20:12 ` Sean Christopherson 2019-06-05 14:29 ` Jarkko Sakkinen 2019-06-05 14:52 ` Sean Christopherson 2019-06-05 21:25 ` Dr. Greg 2019-06-05 22:20 ` Sean Christopherson 2019-06-06 15:32 ` Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 16/28] x86/sgx: Add provisioning Jarkko Sakkinen 2019-04-19 3:06 ` Huang, Kai 2019-04-23 14:33 ` Jarkko Sakkinen 2019-04-24 1:34 ` Jethro Beekman 2019-05-02 8:27 ` Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 17/28] x86/sgx: Add swapping code to the core and SGX driver Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 18/28] x86/sgx: ptrace() support for the " Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 19/28] x86/vdso: Add support for exception fixup in vDSO functions Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 20/28] x86/fault: Add helper function to sanitize error code Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 21/28] x86/fault: Attempt to fixup unhandled #PF in vDSO before signaling Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 22/28] x86/traps: Attempt to fixup exceptions " Jarkko Sakkinen 2019-06-25 15:43 ` Jarkko Sakkinen 2019-06-27 20:32 ` Xing, Cedric 2019-07-11 15:54 ` Sean Christopherson 2019-07-11 22:12 ` Xing, Cedric 2019-07-11 15:56 ` Sean Christopherson 2019-07-11 17:52 ` Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 23/28] x86/vdso: Add __vdso_sgx_enter_enclave() to wrap SGX enclave transitions Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 24/28] selftests/x86: Add a selftest for SGX Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 25/28] x86/sgx: Update MAINTAINERS Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 26/28] docs: x86/sgx: Add Architecture documentation Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 27/28] docs: x86/sgx: Document kernel internals Jarkko Sakkinen 2019-04-17 10:39 ` [PATCH v20 28/28] docs: x86/sgx: Document the enclave API Jarkko Sakkinen 2019-04-18 17:10 ` [PATCH v20 00/28] Intel SGX1 support Dr. Greg 2019-04-18 17:24 ` Dave Hansen 2019-04-19 16:24 ` Dr. Greg 2019-04-19 16:39 ` Dave Hansen 2019-04-18 18:01 ` Dave Hansen 2019-04-19 14:17 ` Dr. Greg 2019-04-19 14:25 ` Dave Hansen 2019-04-19 15:27 ` Andy Lutomirski 2019-04-19 19:38 ` Jethro Beekman 2019-04-19 20:39 ` Thomas Gleixner 2019-04-19 20:46 ` Jethro Beekman 2019-04-19 20:50 ` Thomas Gleixner 2019-04-19 20:54 ` Jethro Beekman 2019-04-19 21:15 ` Andy Lutomirski 2019-04-19 21:19 ` Jethro Beekman 2019-04-19 21:31 ` Andy Lutomirski 2019-04-19 21:35 ` Jethro Beekman 2019-04-19 21:38 ` Thomas Gleixner 2019-04-19 21:56 ` Jethro Beekman 2019-04-20 5:42 ` Thomas Gleixner 2019-04-20 16:02 ` Dr. Greg 2019-04-22 15:01 ` Sean Christopherson 2019-04-22 16:24 ` Dr. Greg 2019-04-22 16:48 ` Sean Christopherson 2019-04-22 16:55 ` Linus Torvalds 2019-04-22 17:17 ` Sean Christopherson 2019-04-23 9:11 ` Dr. Greg 2019-04-22 16:26 ` Andy Lutomirski 2019-04-23 21:15 ` Jethro Beekman 2019-05-10 17:23 ` Xing, Cedric 2019-05-10 17:37 ` Jethro Beekman 2019-05-10 17:54 ` Dave Hansen 2019-05-10 18:04 ` Jethro Beekman 2019-05-10 18:56 ` Xing, Cedric 2019-05-10 19:04 ` Jethro Beekman 2019-05-10 19:22 ` Andy Lutomirski 2019-05-11 1:06 ` Xing, Cedric 2019-05-14 15:08 ` Andy Lutomirski 2019-05-15 8:31 ` Jarkko Sakkinen [not found] ` <20190513102926.GD8743@linux.intel.com> 2019-05-14 10:43 ` Jarkko Sakkinen 2019-05-14 15:13 ` Andy Lutomirski 2019-05-14 20:45 ` Sean Christopherson 2019-05-14 21:27 ` Andy Lutomirski 2019-05-14 22:28 ` Xing, Cedric 2019-05-15 1:30 ` Sean Christopherson 2019-05-15 18:27 ` SGX vs LSM (Re: [PATCH v20 00/28] Intel SGX1 support) Andy Lutomirski 2019-05-15 19:58 ` James Morris 2019-05-15 20:35 ` Andy Lutomirski 2019-05-15 22:46 ` James Morris 2019-05-15 23:13 ` Andy Lutomirski 2019-05-16 3:03 ` Xing, Cedric 2019-05-16 4:40 ` Andy Lutomirski 2019-05-16 22:23 ` Xing, Cedric 2019-05-17 0:35 ` Andy Lutomirski 2019-05-17 1:06 ` Xing, Cedric 2019-05-17 1:21 ` Andy Lutomirski 2019-05-17 16:05 ` Sean Christopherson 2019-05-17 13:53 ` Stephen Smalley 2019-05-17 15:09 ` Sean Christopherson 2019-05-17 16:20 ` Stephen Smalley 2019-05-17 16:24 ` Andy Lutomirski 2019-05-17 16:37 ` Stephen Smalley 2019-05-17 17:12 ` Andy Lutomirski 2019-05-17 18:05 ` Stephen Smalley 2019-05-17 19:20 ` Stephen Smalley 2019-05-17 19:28 ` Sean Christopherson 2019-05-17 20:09 ` Stephen Smalley 2019-05-17 20:14 ` Andy Lutomirski 2019-05-17 20:34 ` Stephen Smalley 2019-05-17 21:36 ` Sean Christopherson 2019-05-17 17:29 ` Sean Christopherson 2019-05-17 17:42 ` Stephen Smalley 2019-05-17 17:50 ` Sean Christopherson 2019-05-17 18:16 ` Stephen Smalley 2019-05-17 17:43 ` Andy Lutomirski 2019-05-17 17:55 ` Sean Christopherson 2019-05-17 18:04 ` Linus Torvalds 2019-05-17 18:21 ` Sean Christopherson 2019-05-17 18:33 ` Linus Torvalds 2019-05-17 18:52 ` Sean Christopherson 2019-05-17 18:53 ` Andy Lutomirski 2019-05-16 7:24 ` James Morris 2019-05-16 21:00 ` Andy Lutomirski 2019-05-20 9:38 ` Dr. Greg 2019-05-15 21:38 ` Sean Christopherson 2019-05-16 1:19 ` Haitao Huang 2019-05-16 5:16 ` Jarkko Sakkinen 2019-05-16 21:02 ` Andy Lutomirski 2019-05-16 22:45 ` Sean Christopherson 2019-05-16 23:29 ` Xing, Cedric 2019-05-20 11:29 ` Jarkko Sakkinen 2019-05-20 11:33 ` Jarkko Sakkinen 2019-05-17 0:03 ` Sean Christopherson 2019-05-17 0:26 ` Andy Lutomirski 2019-05-17 15:41 ` Sean Christopherson 2019-05-20 11:42 ` Jarkko Sakkinen 2019-05-20 11:41 ` Jarkko Sakkinen 2019-05-21 15:19 ` Jarkko Sakkinen 2019-05-21 15:24 ` Jethro Beekman 2019-05-22 13:10 ` Jarkko Sakkinen 2019-05-21 15:51 ` Sean Christopherson 2019-05-22 13:20 ` Jarkko Sakkinen 2019-05-22 13:22 ` Jarkko Sakkinen 2019-05-22 13:56 ` Stephen Smalley 2019-05-22 15:38 ` Sean Christopherson 2019-05-22 22:42 ` Andy Lutomirski 2019-05-23 2:35 ` Sean Christopherson 2019-05-23 10:26 ` Jarkko Sakkinen 2019-05-23 14:17 ` Sean Christopherson 2019-05-23 15:38 ` Andy Lutomirski 2019-05-23 23:40 ` Sean Christopherson 2019-05-24 1:17 ` Andy Lutomirski 2019-05-24 7:24 ` Xing, Cedric 2019-05-24 15:41 ` Stephen Smalley 2019-05-24 16:57 ` Xing, Cedric 2019-05-24 17:42 ` Sean Christopherson 2019-05-24 17:54 ` Andy Lutomirski 2019-05-24 17:56 ` Sean Christopherson 2019-05-24 17:54 ` Sean Christopherson 2019-05-24 18:34 ` Xing, Cedric 2019-05-24 19:13 ` Sean Christopherson 2019-05-24 19:30 ` Andy Lutomirski 2019-05-24 20:42 ` Xing, Cedric 2019-05-24 21:11 ` Sean Christopherson 2019-05-24 19:37 ` Andy Lutomirski 2019-05-24 20:03 ` Sean Christopherson 2019-05-24 20:58 ` Xing, Cedric 2019-05-24 21:27 ` Andy Lutomirski 2019-05-24 22:41 ` Sean Christopherson 2019-05-24 23:42 ` Andy Lutomirski 2019-05-25 22:40 ` Xing, Cedric 2019-05-26 0:57 ` Andy Lutomirski 2019-05-26 6:09 ` Xing, Cedric 2019-05-28 20:24 ` Sean Christopherson 2019-05-28 20:48 ` Andy Lutomirski 2019-05-28 21:41 ` Sean Christopherson 2019-05-30 5:38 ` Xing, Cedric 2019-05-30 17:21 ` Sean Christopherson 2019-05-29 14:08 ` Stephen Smalley 2019-05-30 6:12 ` Xing, Cedric 2019-05-30 14:22 ` Stephen Smalley 2019-05-30 14:31 ` Andy Lutomirski 2019-05-30 15:04 ` Stephen Smalley 2019-05-30 16:14 ` Andy Lutomirski 2019-05-30 18:01 ` Sean Christopherson 2019-05-30 19:20 ` Andy Lutomirski 2019-05-30 21:16 ` Sean Christopherson 2019-05-30 21:23 ` Andy Lutomirski 2019-05-30 21:36 ` Sean Christopherson 2019-06-03 9:12 ` Dr. Greg 2019-06-03 21:08 ` Jarkko Sakkinen 2019-05-30 21:48 ` Xing, Cedric 2019-05-30 22:24 ` Sean Christopherson 2019-06-03 21:05 ` Jarkko Sakkinen 2019-06-03 20:54 ` Jarkko Sakkinen 2019-06-03 21:23 ` Sean Christopherson 2019-06-04 11:39 ` Jarkko Sakkinen 2019-06-03 21:37 ` Andy Lutomirski 2019-06-03 20:47 ` Jarkko Sakkinen 2019-06-03 20:43 ` Jarkko Sakkinen 2019-05-25 17:31 ` Dr. Greg 2019-05-24 16:43 ` Andy Lutomirski 2019-05-24 17:07 ` Sean Christopherson 2019-05-24 17:51 ` Andy Lutomirski 2019-05-24 14:44 ` Stephen Smalley 2019-05-27 13:48 ` Jarkko Sakkinen 2019-05-23 19:58 ` Sean Christopherson 2019-05-27 13:34 ` Jarkko Sakkinen 2019-05-27 13:38 ` Jarkko Sakkinen 2019-05-23 8:10 ` Jarkko Sakkinen 2019-05-23 8:23 ` Jarkko Sakkinen 2019-05-20 11:36 ` Jarkko Sakkinen 2019-05-15 10:35 ` [PATCH v20 00/28] Intel SGX1 support Jarkko Sakkinen 2019-05-15 11:00 ` Jarkko Sakkinen 2019-05-15 14:27 ` Andy Lutomirski 2019-05-16 5:07 ` Jarkko Sakkinen 2019-05-16 6:51 ` Jarkko Sakkinen 2019-05-16 7:02 ` Jarkko Sakkinen 2019-05-15 13:21 ` Sean Christopherson 2019-05-16 5:01 ` Jarkko Sakkinen 2019-05-15 8:49 ` Jarkko Sakkinen 2019-05-15 9:58 ` Jarkko Sakkinen 2019-05-14 14:33 ` Haitao Huang 2019-05-14 15:17 ` Andy Lutomirski 2019-05-14 15:30 ` Haitao Huang 2019-05-14 20:45 ` Andy Lutomirski 2019-05-14 21:08 ` Haitao Huang 2019-05-14 21:58 ` Xing, Cedric 2019-05-15 5:15 ` Haitao Huang 2019-05-10 18:44 ` Xing, Cedric 2019-04-19 21:34 ` Thomas Gleixner 2019-04-19 21:05 ` Jethro Beekman 2019-04-18 18:07 ` Andy Lutomirski 2019-04-22 20:42 ` [RFC PATCH v1 0/3] An alternative __vdso_sgx_enter_enclave() to allow enclave/host parameter passing using untrusted stack Cedric Xing 2019-04-22 22:05 ` Sean Christopherson 2019-04-23 0:37 ` Cedric Xing 2019-04-24 6:26 ` [RFC PATCH v2 " Cedric Xing 2019-07-10 11:17 ` Jarkko Sakkinen 2019-07-10 18:08 ` Xing, Cedric 2019-07-10 22:46 ` Jarkko Sakkinen 2019-07-10 22:54 ` Xing, Cedric 2019-07-11 9:36 ` Jarkko Sakkinen 2019-07-11 19:49 ` Xing, Cedric 2019-07-10 23:15 ` Jarkko Sakkinen 2019-07-10 23:37 ` Xing, Cedric 2019-07-11 9:38 ` Jarkko Sakkinen 2019-07-11 15:50 ` Sean Christopherson 2019-07-11 17:59 ` Jarkko Sakkinen 2019-07-11 19:51 ` Xing, Cedric 2019-07-11 4:21 ` [RFC PATCH v3 0/3] x86/sgx: Amend vDSO API to allow enclave/host parameter passing on " Cedric Xing 2019-07-12 3:28 ` Jarkko Sakkinen 2019-07-13 6:51 ` [RFC PATCH v4 " Cedric Xing 2019-07-13 6:51 ` [RFC PATCH v4 1/3] selftests/x86/sgx: Fix Makefile for SGX selftest Cedric Xing 2019-07-13 15:10 ` Jarkko Sakkinen 2019-07-13 15:15 ` Jarkko Sakkinen 2019-07-13 17:29 ` Xing, Cedric 2019-07-14 14:53 ` Jarkko Sakkinen 2019-07-13 6:51 ` [RFC PATCH v4 2/3] x86/vdso: Modify __vdso_sgx_enter_enclave() to allow parameter passing on untrusted stack Cedric Xing 2019-07-13 15:04 ` Jarkko Sakkinen 2019-07-13 15:06 ` Jarkko Sakkinen 2019-07-13 6:51 ` [RFC PATCH v4 3/3] selftests/x86/sgx: Augment SGX selftest to test vDSO API Cedric Xing 2019-07-13 15:21 ` Jarkko Sakkinen 2019-07-13 17:20 ` Xing, Cedric 2019-07-14 14:40 ` Jarkko Sakkinen 2019-07-14 14:47 ` Jarkko Sakkinen 2019-07-17 21:57 ` Xing, Cedric 2019-07-11 4:21 ` [RFC PATCH v3 1/3] selftests/x86: Fixed Makefile for SGX selftest Cedric Xing 2019-07-11 4:21 ` [RFC PATCH v3 2/3] x86/vdso: Modify __vdso_sgx_enter_enclave() to allow parameter passing on untrusted stack Cedric Xing 2019-07-11 9:50 ` Jarkko Sakkinen 2019-07-11 9:53 ` Jarkko Sakkinen 2019-07-11 15:42 ` Sean Christopherson 2019-07-11 17:55 ` Jarkko Sakkinen 2019-07-11 17:58 ` Sean Christopherson 2019-07-12 3:16 ` Jarkko Sakkinen 2019-07-13 7:00 ` Xing, Cedric 2019-07-11 4:21 ` [RFC PATCH v3 3/3] selftests/x86: Augment SGX selftest to test new __vdso_sgx_enter_enclave() and its callback interface Cedric Xing 2019-04-24 6:26 ` [RFC PATCH v2 1/3] selftests/x86: Fixed Makefile for SGX selftest Cedric Xing 2019-07-12 3:19 ` Jarkko Sakkinen 2019-07-13 6:58 ` Xing, Cedric 2019-04-24 6:26 ` [RFC PATCH v2 2/3] x86/vdso: Modify __vdso_sgx_enter_enclave() to allow parameter passing on untrusted stack Cedric Xing 2019-04-24 19:04 ` Sean Christopherson 2019-04-25 23:31 ` Xing, Cedric 2019-04-26 21:00 ` Sean Christopherson 2019-05-02 8:28 ` Jarkko Sakkinen 2019-04-24 6:26 ` [RFC PATCH v2 3/3] selftests/x86: Augment SGX selftest to test new __vdso_sgx_enter_enclave() and its callback interface Cedric Xing 2019-07-12 3:25 ` Jarkko Sakkinen 2019-07-13 7:03 ` Xing, Cedric 2019-04-22 20:42 ` [RFC PATCH v1 1/3] selftests/x86: Fixed Makefile for SGX selftest Cedric Xing 2019-04-23 0:37 ` Cedric Xing 2019-04-22 20:42 ` Cedric Xing [this message] 2019-04-22 22:26 ` [RFC PATCH v1 2/3] x86/vdso: Modify __vdso_sgx_enter_enclave() to allow parameter passing on untrusted stack Sean Christopherson 2019-04-23 0:37 ` Cedric Xing 2019-04-23 1:25 ` Andy Lutomirski 2019-04-24 17:56 ` Xing, Cedric 2019-04-23 19:26 ` Sean Christopherson 2019-04-23 19:44 ` Andy Lutomirski 2019-04-22 20:42 ` [RFC PATCH v1 3/3] selftests/x86: Augment SGX selftest to test new __vdso_sgx_enter_enclave() and its callback interface Cedric Xing 2019-04-23 0:37 ` Cedric Xing 2019-04-23 1:29 ` Andy Lutomirski 2019-04-23 1:48 ` Sean Christopherson 2019-04-23 18:59 ` Sean Christopherson 2019-04-23 19:07 ` Andy Lutomirski 2019-04-23 20:11 ` Sean Christopherson 2019-04-23 11:56 ` [PATCH v20 00/28] Intel SGX1 support Jarkko Sakkinen 2019-04-23 16:52 ` Andy Lutomirski 2019-04-24 12:17 ` Jarkko Sakkinen 2019-05-08 13:45 ` Jarkko Sakkinen
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=ba2a51568f3adaf74994d33ea3cbee570e20c6f6.1555965327.git.cedric.xing@intel.com \ --to=cedric.xing@intel.com \ --cc=linux-sgx@vger.kernel.org \ /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: linkBe 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).