Message ID | 20191011004059.28581-3-sean.j.christopherson@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | x86/vdso: sgx: Bug fixes | expand |
On Thu, Oct 10, 2019 at 05:40:56PM -0700, Sean Christopherson wrote: > Add an assembly trampoline to the basic exit handler to snapshot the > pre-CALL %rsp in order to verify that the stack is 16-byte aligned as > required by the x86_64 ABI. > > Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> I'll rework the existing selftest commit in my tree to use the "non-VDSO" (aka plain EENTER) call path. Please then provide me commits for vDSO selftests. These commits will be their own commits in the patch set. I'll move my selftest commit earlier in the patch set before the vDSO commits. Should be more than obvious why this makes sene, so I skip explaining it but can provide rationale on demand basis. I'll work this change out tomorrow. /Jarkko
On Tue, Oct 15, 2019 at 12:09:40AM +0300, Jarkko Sakkinen wrote: > On Thu, Oct 10, 2019 at 05:40:56PM -0700, Sean Christopherson wrote: > > Add an assembly trampoline to the basic exit handler to snapshot the > > pre-CALL %rsp in order to verify that the stack is 16-byte aligned as > > required by the x86_64 ABI. > > > > Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> > > I'll rework the existing selftest commit in my tree to use the > "non-VDSO" (aka plain EENTER) call path. Please then provide me commits > for vDSO selftests. These commits will be their own commits in the patch > set. I'll move my selftest commit earlier in the patch set before the > vDSO commits. > > Should be more than obvious why this makes sene, so I skip explaining > it but can provide rationale on demand basis. > > I'll work this change out tomorrow. I'd be also happy to get more clean commit messages for the vDSO commits. It is more important than refining documentation because commit log is immutable. I've already stated what is wrong ATM but I'll explain it once more shortly. When writing a commit message you should always go below your expectations what reviewers already know. You want to make them easily accessible for maintainers who have to deal with dozens of patches on a daily basis. /Jarkko
diff --git a/tools/testing/selftests/x86/sgx/defines.h b/tools/testing/selftests/x86/sgx/defines.h index 199a830e198a..8ddd3cfd1070 100644 --- a/tools/testing/selftests/x86/sgx/defines.h +++ b/tools/testing/selftests/x86/sgx/defines.h @@ -15,6 +15,7 @@ typedef uint64_t u64; #define __aligned(x) __attribute__((__aligned__(x))) #define __packed __attribute__((packed)) +#define __used __attribute__((__used__)) /* Derived from asm-generic/bitsperlong.h. */ #if __x86_64__ diff --git a/tools/testing/selftests/x86/sgx/main.c b/tools/testing/selftests/x86/sgx/main.c index 029502d81ac9..f46e5c8fdac4 100644 --- a/tools/testing/selftests/x86/sgx/main.c +++ b/tools/testing/selftests/x86/sgx/main.c @@ -331,14 +331,28 @@ static void test_vdso_no_exit_handler(struct sgx_secs *secs) ASSERT_EQ(exception.leaf, ENCLU_EENTER); } -static int basic_exit_handler(long rdi, long rsi, long rdx, int ret, - long r8, long r9, void *tcs, long ursp, - struct sgx_enclave_exception *e) +static int __used __basic_exit_handler(long rdi, long rsi, long rdx, int ret, + long r8, long r9, void *tcs, long ursp, + struct sgx_enclave_exception *e) { + TEST_ASSERT(!(r9 & 0xf), "Pre-CALL RSP not 16-byte aligned: %lx\n", r9); ASSERT_EQ(ret, 0); return 0; } +extern void *basic_exit_handler; + +static void __used basic_exit_handler_trampoline(void) +{ + /* Load the pre-CALL %rsp into %r9 to verify correct alignment. */ + asm volatile("1:\n\t" + "lea 0x8(%%rsp), %%r9\n\t" + "jmp __basic_exit_handler\n\t" + "basic_exit_handler: .quad 1b\n\t" + ".global basic_exit_handler" + ::: "memory"); +} + static int nr_page_faults; static int mprotect_exit_handler(long rdi, long rsi, long rdx, int ret,
Add an assembly trampoline to the basic exit handler to snapshot the pre-CALL %rsp in order to verify that the stack is 16-byte aligned as required by the x86_64 ABI. Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> --- tools/testing/selftests/x86/sgx/defines.h | 1 + tools/testing/selftests/x86/sgx/main.c | 20 +++++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-)