Artikel-ID: 000058511 Inhaltstyp: Wartung und Leistung Letzte Überprüfung: 10.08.2021

Das Übergeben großer Strukturen an eine Enklave führt nicht zu Paging im Enklaven-Seiten-Cache (EPC).

BUILT IN - ARTICLE INTRO SECOND COMPONENT
Zusammenfassung

So kopieren Sie alle Daten in Strukturen von der nicht vertrauenswürdigen Domäne in die vertrauenswürdige Domäne der Intel® Software Guard Extensions (Intel® SGX) Enklaven

Beschreibung

EDL-Datei (EDL):

Struktur pair_t {
uint32_t-Taste;
uint32_t Wert;
};

Struktur table_t {
Struktur pair_t* Paare;
uint32_t num_pairs;
};

public sgx_status_t ecall_sort_table([in] struct table_t * rel);

Die table_t Struktur beträgt 1,1 GB, was wesentlich größer als das 128-MB-EPC ist. Der in der Enklave verwendete Speicher ist viel geringer als der zugewiesene Speicher der Struktur in der nicht vertrauenswürdigen Anwendung, und im EPC gibt es keine Paging-Speicher.

Lösung

Die oben genannten Struktur- und Ecall-Funktionsdefinitionen führen zu einer Kopie der Struktur, die sich in unerlaubt abzeichnet. Eine kopierte Kopie kopiert nur die Pointer-Adressen, nicht die tatsächlichen Daten, auf die die Pointer Bezug haben. In diesem Fall wird die Pointer-Adresse in den Speicherbereich der Enklave im EPC oder in die vertrauenswürdige Domäne kopiert, die Daten bleiben jedoch in der nicht vertrauenswürdigen Domäne. Beim EPC tritt kein Paging auf, weil der Großteil der Daten in einer nicht vertrauenswürdigen Domäne liegt.

Nachfolgend sehen Sie Strukturdefinitionen und Deklarationen, die eine kopierernde Kopie und eine tiefe Kopie erzielen. Um die Strukturdaten tief in das EPC zu kopieren, verwenden Sie die Strukturen in der EDL-Datei anhand von Anzahl und Größe, die vom Entwickler festgelegt werden.

Struktur pair_t {
uint32_t-Taste;
uint32_t Wert;
};

Diese Strukturdeklaration führt zu einer kopierten Kopie der Paare-Struktur

Struktur table_t {
Struktur pair_t* Paare;
uint32_t num_pairs;
};

Diese Strukturdeklaration führt zu einer tiefen Kopie der Paare-Struktur

Struktur deep_table_t {
[anzahl = 1, Größe = 12] Struktur pair_t* Paare;
uint32_t num_pairs;
};

 

Trusted {

Diese Funktionsdeklaration führt zu einer kopierten Kopie der Rel-Struktur

Public sgx_status_t ecall_sort_table ([in] Struktur table_t * rel);

Diese Funktionsdeklaration führt zu einer tiefen Kopie der Rel-Struktur

public sgx_status_t ecall_deep_sort_table([in, count = 1] struct deep_table_t* rel);
};

Überprüfen Sie nach der Kompilierung enclave_t.c, um die generierten Proxyfunktionen zu sehen. Die Funktion, sgx_ecall_deep_sort_table angezeigt wird, zeigt eine tiefe Kopie der Struktur von nicht vertrauenswürdigem Speicher zu vertrauenswürdigem Speicher.

Weitere Informationen

Im Abschnitt Strukturen, Enums und Unions im Intel® SGX Developer Reference Guide für Linux* finden Sie eine ausführliche Erklärung, wie Sie eine tiefe Kopie der Strukturelemente in die vertrauenswürdige Domain erreichen können.

HinweisDer neueste Intel® Software Guard Extensions (Intel® SGX) Developer Reference Guide für Linux* finden Sie im Dokumentationsabschnitt der neuesten Intel® Software Guard Extensions Linux Release*.

Das Edger8 Tool generiert automatisch die Proxyfunktionen, die vor der Kompilierung des Codes Daten zwischen nicht vertrauenswürdigen und vertrauenswürdigen Domänen absichern. Die Anzahl- und Größenparameter in der EDL-Datei geben dem Edger8-Tool an, wie viel Speicher in die Proxyfunktionen kopiert werden muss.

Zugehörige Produkte

Dieser Artikel bezieht sich auf 1 Produkte

Der Inhalt dieser Seite ist eine Kombination aus menschlicher und computerbasierter Übersetzung des originalen, englischsprachigen Inhalts. Dieser Inhalt wird zum besseren Verständnis und nur zur allgemeinen Information bereitgestellt und sollte nicht als vollständig oder fehlerfrei betrachtet werden. Sollte eine Diskrepanz zwischen der englischsprachigen Version dieser Seite und der Übersetzung auftreten, gilt die englische Version. Englische Version dieser Seite anzeigen.