Processus d’allocation de mémoire de tas à une enclave Intel® Software Guard Extensions (Intel® SGX)
Impossible de déterminer quelle mémoire de tas supérieure à la mémoire EPC (Enclave Page Cache) disponible est allouée aux enclaves lors de la création.
Intel® Software Guard Extensions (Intel® SGX) utilise l’instruction du processeur EADD pour ajouter de la mémoire, y compris un tas, à une enclave. Pour ajouter une page de tas, une page EPC (Enclave Page Cache) doit être disponible. Si une page gratuite existe déjà, elle est immédiatement utilisée par EADD. Si la CPE est déjà pleine, une page en cours d’utilisation est paginée et libérée. Cette page maintenant gratuite pourrait être utilisée pour la page du tas. Cette page est dans l’EPC parce que c’est une page nouvellement libérée. Dans les deux cas, aucune page n’est échangée. Lorsque l’EADD proprement dit se produit, la page est déjà présente dans l’EPC — aucune pagination ou échange requis.
En suivant le code :
- Tout d’abord, l’outil de signe SGX détermine la disposition de l’enclave. Il place les informations de mise en page dans les métadonnées. Voici où le tas est ajouté et défini sur EADD uniquement : manage_metadata#L775
- Pendant le chargement de l’enclave, le chargeur uRTS (Run-time System) non fiable parcourt en boucle les entrées de mise en page et ajoute de manière appropriée : loader.cpp#L382
- Chaque page d’enclave est ajoutée en appelant le pilote, qui appelle EADD : loader.cpp#L311