Test DCAP ioctl only on SGX2 HW
This commit is contained in:
		
							parent
							
								
									de2fcc9bc1
								
							
						
					
					
						commit
						d52d9eddb8
					
				| @ -21,6 +21,37 @@ | |||||||
| #endif | #endif | ||||||
| #include "test.h" | #include "test.h" | ||||||
| 
 | 
 | ||||||
|  | #define SGX_LEAF 0x12 | ||||||
|  | #define SGX2_SHIFT 1 | ||||||
|  | 
 | ||||||
|  | typedef struct t_cpuid { | ||||||
|  |     unsigned int eax; | ||||||
|  |     unsigned int ebx; | ||||||
|  |     unsigned int ecx; | ||||||
|  |     unsigned int edx; | ||||||
|  | } t_cpuid_t; | ||||||
|  | 
 | ||||||
|  | static inline void native_cpuid(int leaf, int subleaf, t_cpuid_t *p) { | ||||||
|  |     memset(p, 0, sizeof(*p)); | ||||||
|  |     /* ecx is often an input as well as an output. */ | ||||||
|  |     asm volatile("cpuid" | ||||||
|  |                  : "=a" (p->eax), | ||||||
|  |                  "=b" (p->ebx), | ||||||
|  |                  "=c" (p->ecx), | ||||||
|  |                  "=d" (p->edx) | ||||||
|  |                  : "a" (leaf), "c" (subleaf)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // check the hw is SGX1 or SGX2
 | ||||||
|  | int is_sgx2_supported() { | ||||||
|  |     t_cpuid_t cpu_info = {0, 0, 0, 0}; | ||||||
|  |     native_cpuid(SGX_LEAF, 0, &cpu_info); | ||||||
|  |     if (!(cpu_info.eax & (1 << SGX2_SHIFT))) { | ||||||
|  |         return 0; | ||||||
|  |     } | ||||||
|  |     return 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // ============================================================================
 | // ============================================================================
 | ||||||
| // Test cases for TTY ioctls
 | // Test cases for TTY ioctls
 | ||||||
| // ============================================================================
 | // ============================================================================
 | ||||||
| @ -392,7 +423,12 @@ static int do_SGXIOC_GENERATE_AND_VERIFY_DCAP_QUOTE(int sgx_fd) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int test_sgx_ioctl_SGXIOC_GENERATE_AND_VERIFY_DCAP_QUOTE(void) { | int test_sgx_ioctl_SGXIOC_GENERATE_AND_VERIFY_DCAP_QUOTE(void) { | ||||||
|  |     if (is_sgx2_supported()) { | ||||||
|         return do_sgx_ioctl_test(do_SGXIOC_GENERATE_AND_VERIFY_DCAP_QUOTE); |         return do_sgx_ioctl_test(do_SGXIOC_GENERATE_AND_VERIFY_DCAP_QUOTE); | ||||||
|  |     } else { | ||||||
|  |         printf("Warning: test_sgx_ioctl_SGXIOC_GENERATE_AND_VERIFY_DCAP_QUOTE is skipped\n"); | ||||||
|  |         return 0; | ||||||
|  |     } | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| @ -401,10 +437,20 @@ int test_sgx_ioctl_SGXIOC_IS_EDMM_SUPPORTED(void) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int test_sgx_ioctl_SGXIOC_GET_EPID_GROUP_ID(void) { | int test_sgx_ioctl_SGXIOC_GET_EPID_GROUP_ID(void) { | ||||||
|  |     // skip the EPID test on SGX2 HW
 | ||||||
|  |     if (is_sgx2_supported()) { | ||||||
|  |         printf("Warning: test_sgx_ioctl_SGXIOC_GET_EPID_GROUP_ID is skipped\n"); | ||||||
|  |         return 0; | ||||||
|  |     } | ||||||
|     return do_sgx_ioctl_test(do_SGXIOC_GET_EPID_GROUP_ID); |     return do_sgx_ioctl_test(do_SGXIOC_GET_EPID_GROUP_ID); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int test_sgx_ioctl_SGXIOC_GEN_EPID_QUOTE(void) { | int test_sgx_ioctl_SGXIOC_GEN_EPID_QUOTE(void) { | ||||||
|  |     // skip the EPID test on SGX2 HW
 | ||||||
|  |     if (is_sgx2_supported()) { | ||||||
|  |         printf("Warning: test_sgx_ioctl_SGXIOC_GEN_EPID_QUOTE is skipped\n"); | ||||||
|  |         return 0; | ||||||
|  |     } | ||||||
|     return do_sgx_ioctl_test(do_SGXIOC_GEN_QUOTE); |     return do_sgx_ioctl_test(do_SGXIOC_GEN_QUOTE); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user