Processo para alocar memória heap a um enclave de Intel® Software Guard Extensions (Intel® SGX)
Não é possível determinar como a memória armazenada que é maior do que a memória de cache de página de enclave (EPC) disponível é alocada a enclaves na criação.
Intel® Software Guard Extensions (Intel® SGX) usa a instrução do processador EADD para adicionar memória, incluindo heap, a um enclave. Para uma página heap do EADD, deve haver uma página gratuita de Cache de Página de Enclave (EPC) disponível. Se uma página gratuita já existe, ela é imediatamente usada pelo EADD. Se a EPC já estiver cheia, a página atualmente em uso será página final e liberada. Essa página agora gratuita pode ser usada para a página heap. Esta página está na EPC porque é uma página recém-liberada. Em ambos os casos, nenhuma página é trocada. Quando a EADD real ocorrer, a página já estará presente no EPC — sem necessidade de paginação ou troca.
Seguindo o código:
- Primeiro, o signtool SGX determina o layout do enclave. Ele coloca as informações de layout nos metadados. Aqui é onde o monte é adicionado e definido apenas para EADD: manage_metadata#L775
- Durante o carregamento do enclave, o carregador de sistema de tempo de execução (uRTS) não confiável faz loops através das entradas de layout e acrescenta adequadamente: carregador.cpp#L382
- Cada página do enclave é adicionada chamando o driver, que chama de EADD: loader.cpp#L311