[hyper mode] Support ms buffer for deep copy hostfile

This commit is contained in:
volcano 2022-04-24 15:45:25 +08:00 committed by Zongmin.Gu
parent 036eb08193
commit 0182c097dd
4 changed files with 54 additions and 25 deletions

@ -167,8 +167,6 @@ int occlum_pal_kill(int pid, int sig);
*/
int occlum_pal_destroy(void);
void free_host_file_buffer_t(struct host_file_buffer_t file_buffer);
#ifdef __cplusplus
}
#endif

@ -112,9 +112,9 @@ int occlum_pal_init(const struct occlum_pal_attr *attr) {
load_file_t hosts_ptr = {0, NULL};
load_file_t resolv_conf_ptr = {0, NULL};
pal_load_file("/etc/hostname", &hostname_ptr);
pal_load_file("/etc/hosts", &hosts_ptr);
pal_load_file("/etc/resolv.conf", &resolv_conf_ptr);
pal_load_file(eid, "/etc/hostname", &hostname_ptr);
pal_load_file(eid, "/etc/hosts", &hosts_ptr);
pal_load_file(eid, "/etc/resolv.conf", &resolv_conf_ptr);
struct host_file_buffer_t file_buffer = {
.hostname_buf = hostname_ptr.buffer,
@ -125,15 +125,10 @@ int occlum_pal_init(const struct occlum_pal_attr *attr) {
.resolv_conf_buf_size = resolv_conf_ptr.size,
};
const struct host_file_buffer_t *file_buffer_ptr = &file_buffer;
sgx_status_t ecall_status = occlum_ecall_init(eid, &ecall_ret, attr->log_level,
resolved_path, file_buffer_ptr);
resolved_path, &file_buffer);
free_host_file_buffer_t(file_buffer);
hostname_ptr.buffer = NULL;
hosts_ptr.buffer = NULL;
resolv_conf_ptr.buffer = NULL;
free_host_file_buffer(eid, &file_buffer);
if (ecall_status != SGX_SUCCESS) {
const char *sgx_err = pal_get_sgx_error_msg(ecall_status);
@ -295,17 +290,6 @@ int occlum_pal_destroy(void) {
return ret;
}
void free_host_file_buffer_t(struct host_file_buffer_t file_buffer) {
free((void *)file_buffer.hostname_buf);
file_buffer.hostname_buf = NULL;
free((void *)file_buffer.hosts_buf);
file_buffer.hosts_buf = NULL;
free((void *)file_buffer.resolv_conf_buf);
file_buffer.resolv_conf_buf = NULL;
}
int pal_get_version(void) __attribute__((weak, alias ("occlum_pal_get_version")));
int pal_init(const struct occlum_pal_attr *attr)\

@ -1,9 +1,14 @@
#include <stdio.h>
#include <stdlib.h>
#include "Enclave_u.h"
#include "pal_log.h"
#include "pal_load_file.h"
void pal_load_file(const char *filename, load_file_t *load_file) {
void pal_load_file(const sgx_enclave_id_t eid, const char *filename,
load_file_t *load_file) {
#ifndef SGX_MODE_HYPER
UNUSED(eid);
#endif
FILE *fp = fopen(filename, "rb");
if (fp == NULL) {
@ -14,7 +19,11 @@ void pal_load_file(const char *filename, load_file_t *load_file) {
long fsize = ftell(fp);
fseek(fp, 0, SEEK_SET);
#ifndef SGX_MODE_HYPER
load_file->buffer = malloc(fsize + 1);
#else
load_file->buffer = sgx_ecall_ms_buffer_alloc(eid, fsize + 1);
#endif
if (load_file->buffer == NULL) {
PAL_WARN("Warning: Failed to malloc buffer for file: %s", filename);
return;
@ -25,3 +34,35 @@ void pal_load_file(const char *filename, load_file_t *load_file) {
fclose(fp);
}
void free_host_file_buffer(const sgx_enclave_id_t eid,
struct host_file_buffer_t *file_buffer) {
#ifndef SGX_MODE_HYPER
UNUSED(eid);
if (file_buffer->hostname_buf) {
free((void *)file_buffer->hostname_buf);
}
if (file_buffer->hosts_buf) {
free((void *)file_buffer->hosts_buf);
}
if (file_buffer->resolv_conf_buf) {
free((void *)file_buffer->resolv_conf_buf);
}
#else
if (file_buffer->hostname_buf) {
sgx_ecall_ms_buffer_free(eid);
}
if (file_buffer->hosts_buf) {
sgx_ecall_ms_buffer_free(eid);
}
if (file_buffer->resolv_conf_buf) {
sgx_ecall_ms_buffer_free(eid);
}
#endif
file_buffer->hostname_buf = NULL;
file_buffer->hostname_buf_size = 0;
file_buffer->hosts_buf = NULL;
file_buffer->hosts_buf_size = 0;
file_buffer->resolv_conf_buf = NULL;
file_buffer->resolv_conf_buf_size = 0;
}

@ -1,11 +1,17 @@
#ifndef __PAL_LOAD_FILE_H__
#define __PAL_LOAD_FILE_H__
#include <sgx_eid.h>
#define UNUSED(val) (void)(val)
typedef struct {
unsigned int size;
char *buffer;
} load_file_t;
void pal_load_file(const char *filename, load_file_t *load_file);
void pal_load_file(const sgx_enclave_id_t eid, const char *filename,
load_file_t *load_file);
void free_host_file_buffer(const sgx_enclave_id_t eid,
struct host_file_buffer_t *file_buffer);
#endif /* __PAL_LOAD_FILE_H__ */