aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSiddhesh Poyarekar <siddhesh@sourceware.org>2017-02-04 12:02:37 +0530
committerSiddhesh Poyarekar <siddhesh@sourceware.org>2017-02-04 12:02:37 +0530
commit53aa04a86c10f49b7481e73d2ca045ecd6ed2df7 (patch)
treec3304cca37aebc39c9293ff47e79d65fe62aebab
parentd675eaf7d99096a952c1d140abfed82c939fb259 (diff)
downloadglibc-53aa04a86c10f49b7481e73d2ca045ecd6ed2df7.zip
glibc-53aa04a86c10f49b7481e73d2ca045ecd6ed2df7.tar.gz
glibc-53aa04a86c10f49b7481e73d2ca045ecd6ed2df7.tar.bz2
tunables: Fail tests correctly when setgid does not work
The child process of the tst-env-setuid process was failing correctly with EXIT_UNSUPPORTED but the parent did not carry that status forward and failed instead. This patch fixes this so that tests on nosuid /tmp fails gracefully with UNSUPPORTED. Tested by making my tmpfs nosuid. * elf/tst-env-setuid.c (do_execve): Return EXIT_UNSUPPORTED in parent if child exited in that manner. Print WEXITSTATUS instead of the raw status. (do_test_prep): Rename to do_test. (do_test): Return the result of run_executable_sgid. (TEST_FUNCTION_ARGV): Adjust.
-rw-r--r--ChangeLog9
-rw-r--r--elf/tst-env-setuid.c12
2 files changed, 16 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 9ed7ff6..767e22a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2017-02-04 Siddhesh Poyarekar <siddhesh@sourceware.org>
+
+ * elf/tst-env-setuid.c (do_execve): Return EXIT_UNSUPPORTED in
+ parent if child exited in that manner. Print WEXITSTATUS
+ instead of the raw status.
+ (do_test_prep): Rename to do_test.
+ (do_test): Return the result of run_executable_sgid.
+ (TEST_FUNCTION_ARGV): Adjust.
+
2017-02-03 Alexandre Oliva <aoliva@redhat.com>
Florian Weimer <fweimer@redhat.com>
Carlos O'Donell <carlos@redhat.com>
diff --git a/elf/tst-env-setuid.c b/elf/tst-env-setuid.c
index 85d423d..6ec3fa5 100644
--- a/elf/tst-env-setuid.c
+++ b/elf/tst-env-setuid.c
@@ -87,10 +87,13 @@ do_execve (char **args)
return 1;
}
+ if (WEXITSTATUS (status) == EXIT_UNSUPPORTED)
+ return EXIT_UNSUPPORTED;
+
if (!WIFEXITED (status) || WEXITSTATUS (status) != CHILD_STATUS)
{
printf ("Unexpected exit status %d from child process\n",
- status);
+ WEXITSTATUS (status));
return 1;
}
return 0;
@@ -235,7 +238,7 @@ test_parent (void)
#endif
static int
-do_test_prep (int argc, char **argv)
+do_test (int argc, char **argv)
{
/* Setgid child process. */
if (argc == 2 && strcmp (argv[1], SETGID_CHILD) == 0)
@@ -270,13 +273,12 @@ do_test_prep (int argc, char **argv)
exit (0);
}
- if (run_executable_sgid (target) == 0)
- exit (0);
+ return run_executable_sgid (target);
}
/* Something went wrong and our argv was corrupted. */
_exit (1);
}
-#define TEST_FUNCTION_ARGV do_test_prep
+#define TEST_FUNCTION_ARGV do_test
#include <support/test-driver.c>