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

Reported-by: Ingo Molnar <[email protected]>
Cc: Stas Sergeev <[email protected]>
Cc: Al Viro <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Andy Lutomirski <[email protected]>
Cc: Borislav Petkov <[email protected]>
Cc: Brian Gerst <[email protected]>
Cc: Denys Vlasenko <[email protected]>
Cc: H. Peter Anvin <[email protected]>
Cc: Linus Torvalds <[email protected]>
Cc: Oleg Nesterov <[email protected]>
Cc: Pavel Emelyanov <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Shuah Khan <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andy Lutomirski <[email protected]>
---
  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