Skip to content
Snippets Groups Projects
  • Jarkko Sakkinen's avatar
    08999b24
    x86/sgx: Free backing memory after faulting the enclave page · 08999b24
    Jarkko Sakkinen authored
    
    There is a limited amount of SGX memory (EPC) on each system.  When that
    memory is used up, SGX has its own swapping mechanism which is similar
    in concept but totally separate from the core mm/* code.  Instead of
    swapping to disk, SGX swaps from EPC to normal RAM.  That normal RAM
    comes from a shared memory pseudo-file and can itself be swapped by the
    core mm code.  There is a hierarchy like this:
    
    	EPC <-> shmem <-> disk
    
    After data is swapped back in from shmem to EPC, the shmem backing
    storage needs to be freed.  Currently, the backing shmem is not freed.
    This effectively wastes the shmem while the enclave is running.  The
    memory is recovered when the enclave is destroyed and the backing
    storage freed.
    
    Sort this out by freeing memory with shmem_truncate_range(), as soon as
    a page is faulted back to the EPC.  In addition, free the memory for
    PCMD pages as soon as all PCMD's in a page have been marked as unused
    by zeroing its contents.
    
    Cc: stable@vger.kernel.org
    Fixes: 1728ab54 ("x86/sgx: Add a page reclaimer")
    Reported-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Signed-off-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Link: https://lkml.kernel.org/r/20220303223859.273187-1-jarkko@kernel.org
    08999b24
    History
    x86/sgx: Free backing memory after faulting the enclave page
    Jarkko Sakkinen authored
    
    There is a limited amount of SGX memory (EPC) on each system.  When that
    memory is used up, SGX has its own swapping mechanism which is similar
    in concept but totally separate from the core mm/* code.  Instead of
    swapping to disk, SGX swaps from EPC to normal RAM.  That normal RAM
    comes from a shared memory pseudo-file and can itself be swapped by the
    core mm code.  There is a hierarchy like this:
    
    	EPC <-> shmem <-> disk
    
    After data is swapped back in from shmem to EPC, the shmem backing
    storage needs to be freed.  Currently, the backing shmem is not freed.
    This effectively wastes the shmem while the enclave is running.  The
    memory is recovered when the enclave is destroyed and the backing
    storage freed.
    
    Sort this out by freeing memory with shmem_truncate_range(), as soon as
    a page is faulted back to the EPC.  In addition, free the memory for
    PCMD pages as soon as all PCMD's in a page have been marked as unused
    by zeroing its contents.
    
    Cc: stable@vger.kernel.org
    Fixes: 1728ab54 ("x86/sgx: Add a page reclaimer")
    Reported-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Signed-off-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Link: https://lkml.kernel.org/r/20220303223859.273187-1-jarkko@kernel.org