03.05.2016 20:31, Andy Lutomirski пишет:
The handling for old kernels was wrong.  Fix it.

Reported-by: Ingo Molnar <mi...@kernel.org>
Cc: Stas Sergeev <s...@list.ru>
Cc: Al Viro <v...@zeniv.linux.org.uk>
Cc: Andrew Morton <a...@linux-foundation.org>
Cc: Andy Lutomirski <l...@amacapital.net>
Cc: Borislav Petkov <b...@alien8.de>
Cc: Brian Gerst <brge...@gmail.com>
Cc: Denys Vlasenko <dvlas...@redhat.com>
Cc: H. Peter Anvin <h...@zytor.com>
Cc: Linus Torvalds <torva...@linux-foundation.org>
Cc: Oleg Nesterov <o...@redhat.com>
Cc: Pavel Emelyanov <xe...@parallels.com>
Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Shuah Khan <shua...@osg.samsung.com>
Cc: Thomas Gleixner <t...@linutronix.de>
Cc: linux-...@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Andy Lutomirski <l...@kernel.org>
---
  tools/testing/selftests/sigaltstack/sas.c | 21 ++++++++++++++-------
  1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/tools/testing/selftests/sigaltstack/sas.c 
b/tools/testing/selftests/sigaltstack/sas.c
index 57da8bfde60b..a98c3ef8141f 100644
--- a/tools/testing/selftests/sigaltstack/sas.c
+++ b/tools/testing/selftests/sigaltstack/sas.c
@@ -15,6 +15,7 @@
  #include <alloca.h>
  #include <string.h>
  #include <assert.h>
+#include <errno.h>
#ifndef SS_AUTODISARM
  #define SS_AUTODISARM  (1 << 4)
@@ -117,13 +118,19 @@ int main(void)
        stk.ss_flags = SS_ONSTACK | SS_AUTODISARM;
        err = sigaltstack(&stk, NULL);
        if (err) {
-               perror("[FAIL]\tsigaltstack(SS_ONSTACK | SS_AUTODISARM)");
-               stk.ss_flags = SS_ONSTACK;
-       }
-       err = sigaltstack(&stk, NULL);
-       if (err) {
-               perror("[FAIL]\tsigaltstack(SS_ONSTACK)");
-               return EXIT_FAILURE;
+               if (errno == EINVAL) {
+                       printf("[NOTE]\tThe running kernel doesn't support 
SS_AUTODISARM\n");
+                       /*
+                        * If test cases for the !SS_AUTODISARM variant were
+                        * added, we could still run them.  We don't have any
+                        * test cases like that yet, so just exit and report
+                        * success.
+                        */
But that was the point, please see how it handles the
old kernels:

$ ./sas
[FAIL]    sigaltstack(SS_ONSTACK | SS_AUTODISARM): Invalid argument
[RUN]    signal USR1
[FAIL]    ss_flags=1, should be SS_DISABLE
[RUN]    switched to user ctx
[RUN]    signal USR2
[FAIL]    sigaltstack re-used
[FAIL]    Stack corrupted
[RUN]    Aborting

Unfortunalely, for Ingo it crashed...
I am not sure why, I can't reproduce. :(
So if you disable all the "old" tests, you can as well
remove them, or... find the bug and re-enable. :)

Reply via email to