[test] SIGSTKSZ is not constant in glibc>2.34
This commit is contained in:
		
							parent
							
								
									3fb86f96c4
								
							
						
					
					
						commit
						37c56c8b81
					
				| @ -269,13 +269,17 @@ static void handle_sigfpe(int num, siginfo_t *info, void *_context) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int test_handle_sigfpe() { | int test_handle_sigfpe() { | ||||||
|     static char stack[SIGSTKSZ * 4]; |     char *stack = malloc(SIGSTKSZ * 4); | ||||||
|  |     if (stack == NULL) { | ||||||
|  |         THROW_ERROR("stack allocation failed"); | ||||||
|  |     } | ||||||
|     stack_t expected_ss = { |     stack_t expected_ss = { | ||||||
|         .ss_size = SIGSTKSZ * 4, |         .ss_size = SIGSTKSZ * 4, | ||||||
|         .ss_sp = stack, |         .ss_sp = stack, | ||||||
|         .ss_flags = 0, |         .ss_flags = 0, | ||||||
|     }; |     }; | ||||||
|     if (sigaltstack(&expected_ss, NULL) < 0) { |     if (sigaltstack(&expected_ss, NULL) < 0) { | ||||||
|  |         free(stack); | ||||||
|         THROW_ERROR("failed to call sigaltstack"); |         THROW_ERROR("failed to call sigaltstack"); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -286,9 +290,11 @@ int test_handle_sigfpe() { | |||||||
|     new_action.sa_sigaction = handle_sigfpe; |     new_action.sa_sigaction = handle_sigfpe; | ||||||
|     new_action.sa_flags = SA_SIGINFO | SA_NODEFER | SA_ONSTACK; |     new_action.sa_flags = SA_SIGINFO | SA_NODEFER | SA_ONSTACK; | ||||||
|     if (sigaction(SIGFPE, &new_action, &old_action) < 0) { |     if (sigaction(SIGFPE, &new_action, &old_action) < 0) { | ||||||
|  |         free(stack); | ||||||
|         THROW_ERROR("registering new signal handler failed"); |         THROW_ERROR("registering new signal handler failed"); | ||||||
|     } |     } | ||||||
|     if (old_action.sa_handler != SIG_DFL) { |     if (old_action.sa_handler != SIG_DFL) { | ||||||
|  |         free(stack); | ||||||
|         THROW_ERROR("unexpected old sig handler"); |         THROW_ERROR("unexpected old sig handler"); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -305,14 +311,17 @@ int test_handle_sigfpe() { | |||||||
|     fxsave(y); |     fxsave(y); | ||||||
| 
 | 
 | ||||||
|     if (memcmp(x, y, 512) != 0) { |     if (memcmp(x, y, 512) != 0) { | ||||||
|  |         free(stack); | ||||||
|         THROW_ERROR("floating point registers are modified"); |         THROW_ERROR("floating point registers are modified"); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     printf("Signal handler successfully jumped over the divide-by-zero instruction\n"); |     printf("Signal handler successfully jumped over the divide-by-zero instruction\n"); | ||||||
| 
 | 
 | ||||||
|     if (sigaction(SIGFPE, &old_action, NULL) < 0) { |     if (sigaction(SIGFPE, &old_action, NULL) < 0) { | ||||||
|  |         free(stack); | ||||||
|         THROW_ERROR("restoring old signal handler failed"); |         THROW_ERROR("restoring old signal handler failed"); | ||||||
|     } |     } | ||||||
|  |     free(stack); | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -388,22 +397,28 @@ static void handle_sigpipe(int num, siginfo_t *info, void *context) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int test_sigaltstack() { | int test_sigaltstack() { | ||||||
|     static char stack[SIGSTKSZ]; |     char *stack = malloc(SIGSTKSZ); | ||||||
|  |     if (stack == NULL) { | ||||||
|  |         THROW_ERROR("stack allocation failed"); | ||||||
|  |     } | ||||||
|     stack_t expected_ss = { |     stack_t expected_ss = { | ||||||
|         .ss_size = SIGSTKSZ, |         .ss_size = SIGSTKSZ, | ||||||
|         .ss_sp = stack, |         .ss_sp = stack, | ||||||
|         .ss_flags = 0, |         .ss_flags = 0, | ||||||
|     }; |     }; | ||||||
|     if (sigaltstack(&expected_ss, NULL) < 0) { |     if (sigaltstack(&expected_ss, NULL) < 0) { | ||||||
|  |         free(stack); | ||||||
|         THROW_ERROR("failed to call sigaltstack"); |         THROW_ERROR("failed to call sigaltstack"); | ||||||
|     } |     } | ||||||
|     stack_t actual_ss; |     stack_t actual_ss; | ||||||
|     if (sigaltstack(NULL, &actual_ss) < 0) { |     if (sigaltstack(NULL, &actual_ss) < 0) { | ||||||
|  |         free(stack); | ||||||
|         THROW_ERROR("failed to call sigaltstack"); |         THROW_ERROR("failed to call sigaltstack"); | ||||||
|     } |     } | ||||||
|     if (actual_ss.ss_size != expected_ss.ss_size |     if (actual_ss.ss_size != expected_ss.ss_size | ||||||
|             || actual_ss.ss_sp != expected_ss.ss_sp |             || actual_ss.ss_sp != expected_ss.ss_sp | ||||||
|             || actual_ss.ss_flags != expected_ss.ss_flags) { |             || actual_ss.ss_flags != expected_ss.ss_flags) { | ||||||
|  |         free(stack); | ||||||
|         THROW_ERROR("failed to check the signal stack after set"); |         THROW_ERROR("failed to check the signal stack after set"); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -413,20 +428,25 @@ int test_sigaltstack() { | |||||||
|     new_action.sa_sigaction = handle_sigpipe; |     new_action.sa_sigaction = handle_sigpipe; | ||||||
|     new_action.sa_flags = SA_SIGINFO | SA_NODEFER | SA_ONSTACK; |     new_action.sa_flags = SA_SIGINFO | SA_NODEFER | SA_ONSTACK; | ||||||
|     if (sigaction(SIGPIPE, &new_action, &old_action) < 0) { |     if (sigaction(SIGPIPE, &new_action, &old_action) < 0) { | ||||||
|  |         free(stack); | ||||||
|         THROW_ERROR("registering new signal handler failed"); |         THROW_ERROR("registering new signal handler failed"); | ||||||
|     } |     } | ||||||
|     if (old_action.sa_handler != SIG_DFL) { |     if (old_action.sa_handler != SIG_DFL) { | ||||||
|  |         free(stack); | ||||||
|         THROW_ERROR("unexpected old sig handler"); |         THROW_ERROR("unexpected old sig handler"); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     raise(SIGPIPE); |     raise(SIGPIPE); | ||||||
|     if (g_old_ss.ss_flags != SS_ONSTACK) { |     if (g_old_ss.ss_flags != SS_ONSTACK) { | ||||||
|  |         free(stack); | ||||||
|         THROW_ERROR("check stack flags failed"); |         THROW_ERROR("check stack flags failed"); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (sigaction(SIGPIPE, &old_action, NULL) < 0) { |     if (sigaction(SIGPIPE, &old_action, NULL) < 0) { | ||||||
|  |         free(stack); | ||||||
|         THROW_ERROR("restoring old signal handler failed"); |         THROW_ERROR("restoring old signal handler failed"); | ||||||
|     } |     } | ||||||
|  |     free(stack); | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user