ID de l'article: 000088045 Type de contenu: Information et documentation de produit Dernière révision: 19/10/2021

Comment la mémoire de tas est-elle initialisée lors de la création d’une enclave ?

BUILT IN - ARTICLE INTRO SECOND COMPONENT
En bref

Processus d’allocation de mémoire de tas à une enclave Intel® Software Guard Extensions (Intel® SGX)

Descriptif

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.

Résolution

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 :

  1. 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
  2. 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
  3. Chaque page d’enclave est ajoutée en appelant le pilote, qui appelle EADD : loader.cpp#L311

Produits associés

Cet article concerne 1 produits

Le contenu de cette page est une combinaison de traduction humaine et informatique du contenu original en anglais. Ce contenu vous est fourni pour votre commodité et à titre informatif seulement et ne saurait être totalement exact ou complet. En cas de contradiction entre la version anglaise de cette page et la traduction, c'est la version anglaise qui prévaut. Afficher la version anglaise de cette page.