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