• Reinette Chatre's avatar
    x86/sgx: Support VA page allocation without reclaiming · a76e7f1f
    Reinette Chatre authored
    struct sgx_encl should be protected with the mutex
    sgx_encl->lock. One exception is sgx_encl->page_cnt that
    is incremented (in sgx_encl_grow()) when an enclave page
    is added to the enclave. The reason the mutex is not held
    is to allow the reclaimer to be called directly if there are
    no EPC pages (in support of a new VA page) available at the time.
    
    Incrementing sgx_encl->page_cnt without sgc_encl->lock held
    is currently (before SGX2) safe from concurrent updates because
    all paths in which sgx_encl_grow() is called occur before
    enclave initialization and are protected with an atomic
    operation on SGX_ENCL_IOCTL.
    
    SGX2 includes support for dynamically adding pages after
    enclave initialization where the protection of SGX_ENCL_IOCTL
    is not available.
    
    Make direct reclaim of EPC pages optional when new VA pages
    are added to the enclave. Essentially the existing "reclaim"
    flag used when regular EPC pages are added to an enclave
    becomes available to the caller when used to allocate VA pages
    instead of always being "true".
    
    When adding pages without invoking the reclaimer it is possible
    to do so with sgx_encl->lock held, gaining its protection against
    concurrent updates to sgx_encl->page_cnt after enclave
    initialization.
    
    No functional change.
    Reported-by: default avatarHaitao Huang <haitao.huang@intel.com>
    Signed-off-by: default avatarReinette Chatre <reinette.chatre@intel.com>
    Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
    Link: https://lkml.kernel.org/r/42c5934c229982ee67982bb97c6ab34bde758620.1652137848.git.reinette.chatre@intel.com
    a76e7f1f
ioctl.c 16.8 KB