aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing/selftests/sigaltstack
diff options
context:
space:
mode:
authorAndy Lutomirski <luto@kernel.org>2016-05-03 13:31:51 -0400
committerIngo Molnar <mingo@kernel.org>2016-05-04 02:34:14 -0400
commit0318bc8a919ded355eaa5078689924a15c1bf52a (patch)
treeff92690aed065f4e6078d66e6f9c5c8374359c37 /tools/testing/selftests/sigaltstack
parent158b67b5c5ccda9b909f18028a3cd17185ca1efd (diff)
signals/sigaltstack: Report current flag bits in sigaltstack()
sigaltstack()'s reported previous state uses a somewhat odd convention, but the concept of flag bits is new, and we can do the flag bits sensibly. Specifically, let's just report them directly. This will allow saving and restoring the sigaltstack state using sigaltstack() to work correctly. Signed-off-by: Andy Lutomirski <luto@kernel.org> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Amanieu d'Antras <amanieu@gmail.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Borislav Petkov <bp@alien8.de> Cc: Brian Gerst <brgerst@gmail.com> Cc: Denys Vlasenko <dvlasenk@redhat.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Michal Hocko <mhocko@suse.com> Cc: Oleg Nesterov <oleg@redhat.com> Cc: Pavel Emelyanov <xemul@parallels.com> Cc: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Richard Weinberger <richard@nod.at> Cc: Sasha Levin <sasha.levin@oracle.com> Cc: Shuah Khan <shuahkh@osg.samsung.com> Cc: Stas Sergeev <stsp@list.ru> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Vladimir Davydov <vdavydov@parallels.com> Cc: linux-api@vger.kernel.org Link: http://lkml.kernel.org/r/94b291ec9fd47741a9264851e316e158ded0b00d.1462296606.git.luto@kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/testing/selftests/sigaltstack')
-rw-r--r--tools/testing/selftests/sigaltstack/sas.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/tools/testing/selftests/sigaltstack/sas.c b/tools/testing/selftests/sigaltstack/sas.c
index a98c3ef8141f..4280d0699792 100644
--- a/tools/testing/selftests/sigaltstack/sas.c
+++ b/tools/testing/selftests/sigaltstack/sas.c
@@ -113,6 +113,19 @@ int main(void)
113 perror("mmap()"); 113 perror("mmap()");
114 return EXIT_FAILURE; 114 return EXIT_FAILURE;
115 } 115 }
116
117 err = sigaltstack(NULL, &stk);
118 if (err) {
119 perror("[FAIL]\tsigaltstack()");
120 exit(EXIT_FAILURE);
121 }
122 if (stk.ss_flags == SS_DISABLE) {
123 printf("[OK]\tInitial sigaltstack state was SS_DISABLE\n");
124 } else {
125 printf("[FAIL]\tInitial sigaltstack state was %i; should have been SS_DISABLE\n", stk.ss_flags);
126 return EXIT_FAILURE;
127 }
128
116 stk.ss_sp = sstack; 129 stk.ss_sp = sstack;
117 stk.ss_size = SIGSTKSZ; 130 stk.ss_size = SIGSTKSZ;
118 stk.ss_flags = SS_ONSTACK | SS_AUTODISARM; 131 stk.ss_flags = SS_ONSTACK | SS_AUTODISARM;
@@ -151,12 +164,12 @@ int main(void)
151 perror("[FAIL]\tsigaltstack()"); 164 perror("[FAIL]\tsigaltstack()");
152 exit(EXIT_FAILURE); 165 exit(EXIT_FAILURE);
153 } 166 }
154 if (stk.ss_flags != 0) { 167 if (stk.ss_flags != SS_AUTODISARM) {
155 printf("[FAIL]\tss_flags=%i, should be 0\n", 168 printf("[FAIL]\tss_flags=%i, should be SS_AUTODISARM\n",
156 stk.ss_flags); 169 stk.ss_flags);
157 exit(EXIT_FAILURE); 170 exit(EXIT_FAILURE);
158 } 171 }
159 printf("[OK]\tsigaltstack is enabled after signal\n"); 172 printf("[OK]\tsigaltstack is still SS_AUTODISARM after signal\n");
160 173
161 printf("[OK]\tTest passed\n"); 174 printf("[OK]\tTest passed\n");
162 return 0; 175 return 0;