• Sean Christopherson's avatar
    x86/vdso: Implement a vDSO for Intel SGX enclave call · 84664369
    Sean Christopherson authored
    Enclaves encounter exceptions for lots of reasons: everything from enclave
    page faults to NULL pointer dereferences, to system calls that must be
    “proxied” to the kernel from outside the enclave.
    
    In addition to the code contained inside an enclave, there is also
    supporting code outside the enclave called an “SGX runtime”, which is
    virtually always implemented inside a shared library.  The runtime helps
    build the enclave and handles things like *re*building the enclave if it
    got destroyed by something like a suspend/resume cycle.
    
    The rebuilding has traditionally been handled in SIGSEGV handlers,
    registered by the library.  But, being process-wide, shared state, signal
    handling and shared libraries do not mix well.
    
    Introduce a vDSO function call that wraps the enclave entry functions
    (EENTER/ERESUME functions of the ENCLU instruciton) and returns information
    about any exceptions to the caller in the SGX runtime.
    
    Instead of generating a signal, the kernel places exception information in
    RDI, RSI and RDX. The kernel-provided userspace portion of the vDSO handler
    will place this information in a user-provided buffer or trigger a
    user-provided callback at the time of the exception.
    
    The vDSO function calling convention uses the standard RDI RSI, RDX, RCX,
    R8 and R9 registers.  This makes it possible to declare the vDSO as a C
    prototype, but other than that there is no specific support for SystemV
    ABI. Things like storing XSAVE are the responsibility of the enclave and
    the runtime.
    
     [ bp: Change vsgx.o build dependency to CONFIG_X86_SGX. ]
    Suggested-by: default avatarAndy Lutomirski <luto@amacapital.net>
    Signed-off-by: default avatarSean Christopherson <sean.j.christopherson@intel.com>
    Co-developed-by: default avatarCedric Xing <cedric.xing@intel.com>
    Signed-off-by: default avatarCedric Xing <cedric.xing@intel.com>
    Co-developed-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Tested-by: default avatarJethro Beekman <jethro@fortanix.com>
    Link: https://lkml.kernel.org/r/20201112220135.165028-20-jarkko@kernel.org
    84664369
sgx.h 5.79 KB