As suggested by Andy, remove the work queue in favor of handling the entire EADD flow in the context of the ioctl(). After the worker is gone, pass the source page/address directly to EADD instead of first copying the data into kernel memory. This applies on top the bug fix series I sent yesterday, https://patchwork.kernel.org/cover/11082995/. Sean Christopherson (6): x86/sgx: Validate generic SECINFO immediately after copying from user x86/sgx: Set SGX_ENCL_PAGE_TCS when allocating encl_page x86/sgx: Move encl_page insertion into tree out of alloc flow x86/sgx: Allocate encl_page prior to taking encl->lock x86/sgx: Remove the EADD page worker x86/sgx: Pass userspace source address directly to EADD arch/x86/kernel/cpu/sgx/driver/ioctl.c | 402 +++++++------------------ arch/x86/kernel/cpu/sgx/driver/main.c | 4 - arch/x86/kernel/cpu/sgx/encl.h | 2 - 3 files changed, 103 insertions(+), 305 deletions(-) -- 2.22.0