[hyper mode] Support ms buffer for deep copy hostfile
This commit is contained in:
		
							parent
							
								
									036eb08193
								
							
						
					
					
						commit
						0182c097dd
					
				| @ -167,8 +167,6 @@ int occlum_pal_kill(int pid, int sig); | |||||||
|  */ |  */ | ||||||
| int occlum_pal_destroy(void); | int occlum_pal_destroy(void); | ||||||
| 
 | 
 | ||||||
| void free_host_file_buffer_t(struct host_file_buffer_t file_buffer); |  | ||||||
| 
 |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| } | } | ||||||
| #endif | #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 hosts_ptr = {0, NULL}; | ||||||
|     load_file_t resolv_conf_ptr = {0, NULL}; |     load_file_t resolv_conf_ptr = {0, NULL}; | ||||||
| 
 | 
 | ||||||
|     pal_load_file("/etc/hostname", &hostname_ptr); |     pal_load_file(eid, "/etc/hostname", &hostname_ptr); | ||||||
|     pal_load_file("/etc/hosts", &hosts_ptr); |     pal_load_file(eid, "/etc/hosts", &hosts_ptr); | ||||||
|     pal_load_file("/etc/resolv.conf", &resolv_conf_ptr); |     pal_load_file(eid, "/etc/resolv.conf", &resolv_conf_ptr); | ||||||
| 
 | 
 | ||||||
|     struct host_file_buffer_t file_buffer = { |     struct host_file_buffer_t file_buffer = { | ||||||
|         .hostname_buf = hostname_ptr.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, |         .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, |     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); |     free_host_file_buffer(eid, &file_buffer); | ||||||
|     hostname_ptr.buffer = NULL; |  | ||||||
|     hosts_ptr.buffer = NULL; |  | ||||||
|     resolv_conf_ptr.buffer = NULL; |  | ||||||
| 
 | 
 | ||||||
|     if (ecall_status != SGX_SUCCESS) { |     if (ecall_status != SGX_SUCCESS) { | ||||||
|         const char *sgx_err = pal_get_sgx_error_msg(ecall_status); |         const char *sgx_err = pal_get_sgx_error_msg(ecall_status); | ||||||
| @ -295,17 +290,6 @@ int occlum_pal_destroy(void) { | |||||||
|     return ret; |     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_get_version(void) __attribute__((weak, alias ("occlum_pal_get_version"))); | ||||||
| 
 | 
 | ||||||
| int pal_init(const struct occlum_pal_attr *attr)\ | int pal_init(const struct occlum_pal_attr *attr)\ | ||||||
|  | |||||||
| @ -1,9 +1,14 @@ | |||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
|  | #include "Enclave_u.h" | ||||||
| #include "pal_log.h" | #include "pal_log.h" | ||||||
| #include "pal_load_file.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"); |     FILE *fp = fopen(filename, "rb"); | ||||||
| 
 | 
 | ||||||
|     if (fp == NULL) { |     if (fp == NULL) { | ||||||
| @ -14,7 +19,11 @@ void pal_load_file(const char *filename, load_file_t *load_file) { | |||||||
|     long fsize = ftell(fp); |     long fsize = ftell(fp); | ||||||
| 
 | 
 | ||||||
|     fseek(fp, 0, SEEK_SET); |     fseek(fp, 0, SEEK_SET); | ||||||
|  | #ifndef SGX_MODE_HYPER | ||||||
|     load_file->buffer = malloc(fsize + 1); |     load_file->buffer = malloc(fsize + 1); | ||||||
|  | #else | ||||||
|  |     load_file->buffer = sgx_ecall_ms_buffer_alloc(eid, fsize + 1); | ||||||
|  | #endif | ||||||
|     if (load_file->buffer == NULL) { |     if (load_file->buffer == NULL) { | ||||||
|         PAL_WARN("Warning: Failed to malloc buffer for file: %s", filename); |         PAL_WARN("Warning: Failed to malloc buffer for file: %s", filename); | ||||||
|         return; |         return; | ||||||
| @ -25,3 +34,35 @@ void pal_load_file(const char *filename, load_file_t *load_file) { | |||||||
| 
 | 
 | ||||||
|     fclose(fp); |     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__ | #ifndef __PAL_LOAD_FILE_H__ | ||||||
| #define __PAL_LOAD_FILE_H__ | #define __PAL_LOAD_FILE_H__ | ||||||
|  | #include <sgx_eid.h> | ||||||
|  | 
 | ||||||
|  | #define UNUSED(val) (void)(val) | ||||||
| 
 | 
 | ||||||
| typedef struct { | typedef struct { | ||||||
|     unsigned int size; |     unsigned int size; | ||||||
|     char *buffer; |     char *buffer; | ||||||
| } load_file_t; | } 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__ */ | #endif /* __PAL_LOAD_FILE_H__ */ | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user