ID Artikel: 000058511 Jenis Konten: Perawatan & Kinerja Terakhir Ditinjau: 10/08/2021

Melewatkan Struktur Besar ke Enclave tidak Menyebabkan Paging dalam Enclave Page Cache (EPC)

BUILT IN - ARTICLE INTRO SECOND COMPONENT
Ringkasan

Cara menyalin semua data dalam struktur dari domain yang tidak tepercaya ke domain tepercaya Intel® Software Guard Extensions (Intel® SGX)

Deskripsi

Ecall yang dinyatakan dalam berkas Enclave Definition Language (EDL) sebagai:

pair_t struct {
uint32_t besar;
uint32_t ekonomis;
};

lihat table_t {
pemasangan pair_t* di struct;
uint32_t num_pairs;
};

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

Struktur table_t adalah 1,1 GB, yang jauh lebih besar daripada EPC 128 MB. Memori yang digunakan dalam enclave jauh lebih sedikit daripada memori yang dialokasikan dari struktur dalam aplikasi yang tidak terpercaya, dan tidak ada halaman di EPC.

Resolusi

Definisi fungsi struktur dan ecall di atas menghasilkan salinan struktur yang shallow. Salinan yang shallow hanya menyalin alamat penunjuk, bukan data aktual yang dirujuk oleh penunjuk. Dalam hal ini, alamat penunjuk disalin ke ruang memori enclave di EPC, atau domain tepercaya, tetapi data tetap berada di domain yang tidak terpercaya. EPC tidak mengalami masalah karena sebagian besar data tetap berada di domain yang tidak terpercaya.

Di bawah ini adalah definisi struktur dan pernyataan yang mencapai salinan shallow dan salinan mendalam. Untuk menyalin data struktur secara mendalam ke EPC, nyatakan struktur dalam file EDL menggunakan jumlah dan ukuran, yang diatur oleh pengembang.

lihat pair_t {
uint32_t besar;
uint32_t ekonomis;
};

Pernyataan struktur ini menghasilkan salinan shallow dari struktur pasangan

lihat table_t {
pemasangan pair_t* di struct;
uint32_t num_pairs;
};

Pernyataan struktur ini menghasilkan salinan mendalam dari struktur pasangan

lihat deep_table_t {
[count = 1, ukuran = 12] penyangga pair_t* pasangan;
uint32_t num_pairs;
};

 

tepercaya {

Pernyataan fungsi ini menghasilkan salinan shallow dari struktur rel

dukungan sgx_status_t ecall_sort_table ([in] dari table_t * rel);

Pernyataan fungsi ini menghasilkan salinan mendalam dari struktur rel

sgx_status_t ecall_deep_sort_table publik([in, jumlah = 1] penyangga deep_table_t * rel);
};

Setelah kompilasi, periksa enclave_t.c untuk melihat fungsi proxy yang dihasilkan. Fungsi sgx_ecall_deep_sort_table menunjukkan salinan mendalam iteratif struktur dari memori yang tidak tepercaya hingga memori tepercaya.

Informasi tambahan

Lihat bagian Struktur, Enum, dan Serikat pekerja di panduan referensi pengembang Intel® SGX untuk Linux* untuk penjelasan lengkap tentang cara mencapai salinan mendalam elemen struktur ke dalam domain tepercaya.

CatatanPanduan Referensi Pengembang Intel® Software Guard Extensions (Intel® SGX) terbaru untuk Linux* ada di bagian Dokumentasi dari rilis Linux Intel® Software Guard Extensions terbaru*.

Alat edger8 secara otomatis menghasilkan fungsi proxy yang mengompilasi data antara domain yang tidak tepercaya dan tepercaya sebelum kode dikompilasi. Jumlah dan ukuran parameter dalam file EDL memberi tahu alat edger8 berapa banyak memori yang dapat disalin dalam fungsi proksi.

Produk Terkait

Artikel ini berlaku untuk 1 produk

Isi halaman ini adalah kombinasi terjemahan manusia dan komputer dari konten berbahasa Inggris. Konten ini diberikan hanya untuk kenyamanan Anda serta sebagai informasi umum dan tidak bisa dianggap sebagai lengkap atau akurat. Jika terdapat kontradiksi antara versi bahasa Inggris halaman ini dan terjemahannya, versi bahasa Inggris akan didahulukan. Lihat versi bahasa Inggris halaman ini.