[RFC PATCH v2 0/4] x86: Add vDSO exception fixup for SGX

From: Sean Christopherson
Date: Thu Dec 06 2018 - 17:19:30 EST


This version is almost entirely about the vDSO function itself,
i.e. patch 4/4. Feel free to ignore patches 2/4 and 3/4, I need
to do (a lot) more legwork to address feedback and improve their
changelogs. I'm expecting that to take a fair amount of time and
wanted to get the alternative exit handler idea out there ASAP.

The new vDSO function builds but is otherwise completely untested.

v2:
- For all intents and purposes, rewrite the SGX vDSO function.
This version is quite a bit different than anything discussed in
the past. Rather than provide separate a separate function or an
explicit parameter to request ERESUME, e.g. to recover after a
fault, take an optional "exit handler" that provides the caller
the opportunity to specify if and how the enclave should be
resumed. More details in the changelog.

- Rename it to __vdso_sgx_enter_enclave() to abstract the details
of EENTER and ERESUME to some degree.

- Give the enclave RDI, RSI and RDX to pass data out of the enclave.

- Call fixup_vdso_exception() in do_int3().


v1: https://lkml.kernel.org/r/20181205232012.28920-1-sean.j.christopherson@xxxxxxxxx


Sean Christopherson (4):
x86/vdso: Add support for exception fixup in vDSO functions
x86/fault: Attempt to fixup unhandled #PF in vDSO before signaling
x86/traps: Attempt to fixup exceptions in vDSO before signaling
x86/vdso: Add __vdso_sgx_enter_enclave() to wrap SGX enclave
transitions

arch/x86/entry/vdso/Makefile | 5 +-
arch/x86/entry/vdso/extable.c | 37 +++++++
arch/x86/entry/vdso/extable.h | 17 ++++
arch/x86/entry/vdso/vdso-layout.lds.S | 9 +-
arch/x86/entry/vdso/vdso.lds.S | 1 +
arch/x86/entry/vdso/vdso2c.h | 58 +++++++++--
arch/x86/entry/vdso/vsgx_enter_enclave.c | 119 +++++++++++++++++++++++
arch/x86/include/asm/vdso.h | 5 +
arch/x86/kernel/traps.c | 15 +++
arch/x86/mm/fault.c | 7 ++
10 files changed, 262 insertions(+), 11 deletions(-)
create mode 100644 arch/x86/entry/vdso/extable.c
create mode 100644 arch/x86/entry/vdso/extable.h
create mode 100644 arch/x86/entry/vdso/vsgx_enter_enclave.c

--
2.19.2