@@ -30,13 +30,40 @@ do_test (void)
errno = 0xdefaced;
saved_persona = personality (0xffffffff);
- if (personality (test_persona) != saved_persona
- || personality (0xffffffff) == -1
- || personality (PER_LINUX) == -1
- || personality (0xffffffff) != PER_LINUX
- || 0xdefaced != errno)
+ if (saved_persona == -1 && errno == EPERM)
+ return 77;
+
+ if (personality (test_persona) != saved_persona)
+ {
+ if (errno == EPERM)
+ {
+ rc = 77;
+ goto out;
+ }
+ else
+ rc = 1;
+ }
+
+ if (personality (0xffffffff) == -1)
+ rc = 1;
+
+ if (personality (PER_LINUX) == -1)
+ {
+ if (errno == EPERM)
+ {
+ rc = 77;
+ goto out;
+ }
+ rc = 1;
+ }
+
+ if (personality (0xffffffff) != PER_LINUX)
+ rc = 1;
+
+ if (0xdefaced != errno)
rc = 1;
+out:
(void) personality (saved_persona);
return rc;
}