Como copiar todos os dados em estruturas do domínio não confiável para o domínio confiável dos enclaves de Intel® Software Guard Extensions (Intel® SGX)
Chamado no arquivo Linguagem de definição de Enclave (EDL) como:
struct pair_t {
uint32_t chave;
uint32_t valor;
};
struct table_t {
struct pair_t* pares;
uint32_t num_pairs;
};
public sgx_status_t ecall_sort_table([in] struct table_t * rel);
A table_t é de 1,1 GB, que é muito maior do que o EPC de 128 MB. A memória usada no enclave é muito menor do que a memória alocada da estrutura na aplicação não falsa, e não há paging no EPC.
A estrutura acima e as definições de função de ecall resultam em uma cópia sem cortes da estrutura. Uma cópia mimada copia apenas os endereços de ponteiro, e não os dados reais consultados pelos ponteiros. Neste caso, o endereço de ponteiro é copiado para o espaço de memória do enclave no EPC, ou domínio confiável, mas os dados permanecem no domínio não confiável. O EPC não está apresentando paging porque a maioria dos dados permanece no domínio não interpretado.
A seguir, estão definições e declarações de estrutura que alcançam uma cópia falsa e uma cópia profunda. Para copiar profundamente os dados da estrutura para o EPC, desarmem as estruturas no arquivo EDL usando contagem e tamanho, que são definidas pelo desenvolvedor.
struct pair_t {
uint32_t chave;
uint32_t valor;
};
Esta declaração de estrutura resulta em uma cópia sem cortes da estrutura de pares
struct table_t {
struct pair_t* pares;
uint32_t num_pairs;
};
Esta declaração de estrutura resulta em uma cópia profunda da estrutura de pares
struct deep_table_t {
[contagem = 1, tamanho = 12] struct pair_t* pares;
uint32_t num_pairs;
};
confiável {
Esta declaração de função resulta em uma cópia sem cortes da estrutura de rel
sgx_status_t ecall_sort_table(in) struct table_t* rel);
Esta declaração de função resulta em uma cópia profunda da estrutura de rel
sgx_status_t ecall_deep_sort_table([in, count = 1] struct deep_table_t* rel);
};
Após a compilação, verifique enclave_t.c ver as funções proxy geradas. A função sgx_ecall_deep_sort_table mostra a cópia profunda iterativa da estrutura, desde memória não confiável até memória confiável.
Consulte a seção Estruturas, Enums e Unions no guia de referência de desenvolvedores Intel® SGX para Linux* para obter uma explicação completa sobre como obter uma cópia profunda dos elementos da estrutura no domínio confiável.
Nota | O guia de referência Intel® Software Guard Extensions (Intel® SGX) para desenvolvedores Linux* está na seção Documentação do mais recente Intel® Software Guard Extensions Linux*. |
A ferramenta edger8 gera automaticamente as funções proxy que reúnem dados entre os domínios não confiáveis e confiáveis antes que o código seja compilado. Os parâmetros de contagem e tamanho do arquivo EDL dizem à ferramenta edger8 quanto de memória copiar nas funções proxy.