From: Siddhesh Poyarekar Date: Sat, 4 Feb 2017 06:32:37 +0000 (+0530) Subject: tunables: Fail tests correctly when setgid does not work X-Git-Tag: glibc-2.25~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=53aa04a86c10f49b7481e73d2ca045ecd6ed2df7;p=thirdparty%2Fglibc.git 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. --- diff --git a/ChangeLog b/ChangeLog index 9ed7ff6883c..767e22ae001 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2017-02-04 Siddhesh Poyarekar + + * 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 Florian Weimer Carlos O'Donell diff --git a/elf/tst-env-setuid.c b/elf/tst-env-setuid.c index 85d423d799d..6ec3fa58744 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