• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2002-2003, Intel Corporation. All rights reserved.
3  * Created by:  salwan.searty REMOVE-THIS AT intel DOT com
4  * This file is licensed under the GPL license.  For the full content
5  * of this license, see the COPYING file at the top level of this
6  * source tree.
7 
8  This program tests the assertion that if the ss_flags member is not set to SS_DISABLE,
9  the stack shall be enabled, and the ss_sp and ss_size members specify the new address
10  and size of the stack.
11 
12  Steps:
13  - Set up a handler for signal SIGTOTEST and set the sa_flags member to SA_ONSTACK.
14  - Allocate memory for the alternate signal stack (altstack1)
15  - call sigaltstack() to define the alternate signal stack
16  - raise SIGTOTEST
17  - Inside the handler, try to change the alternate signal stack to altstack2, and verify
18    that the attempt fails.
19 */
20 
21 
22 #include <signal.h>
23 #include <stdio.h>
24 #include <stdlib.h>
25 #include "posixtest.h"
26 
27 #define SIGTOTEST SIGUSR1
28 
29 static stack_t altstack1;
30 
handler()31 void handler()
32 {
33 	stack_t altstack2;
34 
35 	if ((altstack2.ss_sp = malloc(SIGSTKSZ)) == NULL) {
36 		perror
37 		    ("Unexpected error while attempting to setup test pre-conditions");
38 		exit(PTS_UNRESOLVED);
39 	}
40 
41 	altstack2.ss_flags = 0;
42 	altstack2.ss_size = SIGSTKSZ;
43 
44 	if (sigaltstack(&altstack2, NULL) != -1) {
45 		printf
46 		    ("Test FAILED: Attempt to set change alternate stack while inside handler succeeded.\n");
47 		exit(PTS_FAIL);
48 	}
49 }
50 
main(void)51 int main(void)
52 {
53 
54 	struct sigaction act;
55 	act.sa_flags = SA_ONSTACK;
56 	act.sa_handler = handler;
57 	sigemptyset(&act.sa_mask);
58 
59 	if (sigaction(SIGTOTEST, &act, 0) == -1) {
60 		perror
61 		    ("Unexpected error while attempting to setup test pre-conditions");
62 		return PTS_UNRESOLVED;
63 	}
64 
65 	if ((altstack1.ss_sp = malloc(SIGSTKSZ)) == NULL) {
66 		perror
67 		    ("Unexpected error while attempting to setup test pre-conditions");
68 		return PTS_UNRESOLVED;
69 	}
70 
71 	altstack1.ss_flags = 0;
72 	altstack1.ss_size = SIGSTKSZ;
73 
74 	if (sigaltstack(&altstack1, NULL) == -1) {
75 		perror
76 		    ("Unexpected error while attempting to setup test pre-conditions");
77 		return PTS_UNRESOLVED;
78 	}
79 
80 	if (raise(SIGTOTEST) == -1) {
81 		perror
82 		    ("Unexpected error while attempting to setup test pre-conditions");
83 		return PTS_UNRESOLVED;
84 	}
85 
86 	printf("Test PASSED\n");
87 	return PTS_PASS;
88 }
89