[LTP] [PATCH v2 1/1] setgroups03: Fix running more iterations (-i 2)
Petr Vorel
pvorel@suse.cz
Mon Oct 4 10:40:15 CEST 2021
From: Zhao Gongyi <zhaogongyi@huawei.com>
When run the test with option "-i 2", test will fail and
report "setgroups03.c:157: setgroups(65537) fails, Size
is > sysconf(_SC_NGROUPS_MAX), errno=1, expected errno=22".
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Signed-off-by: Zhao Gongyi <zhaogongyi@huawei.com>
[ pvorel: Add const char *uid parameter to use single function, use
SAFE_GETPWNAM() ]
Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
.../kernel/syscalls/setgroups/setgroups03.c | 37 ++++++++-----------
1 file changed, 15 insertions(+), 22 deletions(-)
diff --git a/testcases/kernel/syscalls/setgroups/setgroups03.c b/testcases/kernel/syscalls/setgroups/setgroups03.c
index 490b06996..ecf335a3a 100644
--- a/testcases/kernel/syscalls/setgroups/setgroups03.c
+++ b/testcases/kernel/syscalls/setgroups/setgroups03.c
@@ -73,11 +73,9 @@
#include <grp.h>
#include "test.h"
-
+#include "safe_macros.h"
#include "compat_16.h"
-#define TESTUSER "nobody"
-
char nobody_uid[] = "nobody";
struct passwd *ltpuser;
@@ -86,7 +84,7 @@ int TST_TOTAL = 2;
GID_T *groups_list; /* Array to hold gids for getgroups() */
-int setup1(); /* setup function to test error EPERM */
+void setup1(const char *uid); /* setup function to test error EPERM */
void setup(); /* setup function for the test */
void cleanup(); /* cleanup function for the test */
@@ -95,7 +93,7 @@ struct test_case_t { /* test case struct. to hold ref. test cond's */
int list;
char *desc;
int exp_errno;
- int (*setupfunc) ();
+ void (*setupfunc)(const char *uid);
} Test_cases[] = {
{
1, 1, "Size is > sysconf(_SC_NGROUPS_MAX)", EINVAL, NULL}, {
@@ -126,7 +124,7 @@ int main(int ac, char **av)
for (i = 0; i < TST_TOTAL; i++) {
if (Test_cases[i].setupfunc != NULL) {
- Test_cases[i].setupfunc();
+ Test_cases[i].setupfunc(nobody_uid);
}
gidsetsize = ngroups_max + Test_cases[i].gsize_add;
@@ -156,8 +154,11 @@ int main(int ac, char **av)
gidsetsize, test_desc, TEST_ERRNO,
Test_cases[i].exp_errno);
}
- }
+ if (Test_cases[i].setupfunc != NULL) {
+ Test_cases[i].setupfunc("root");
+ }
+ }
}
cleanup();
@@ -177,7 +178,6 @@ void setup(void)
tst_sig(NOFORK, DEF_HANDLER, cleanup);
TEST_PAUSE;
-
}
/*
@@ -187,29 +187,22 @@ void setup(void)
* Get the user info. from /etc/passwd file.
* This function returns 0 on success.
*/
-int setup1(void)
+void setup1(const char *uid)
{
- struct passwd *user_info; /* struct. to hold test user info */
-
-/* Switch to nobody user for correct error code collection */
- ltpuser = getpwnam(nobody_uid);
- if (seteuid(ltpuser->pw_uid) == -1) {
- tst_resm(TINFO, "setreuid failed to "
- "to set the effective uid to %d", ltpuser->pw_uid);
- perror("setreuid");
- }
+ struct passwd *user_info;
- if ((user_info = getpwnam(TESTUSER)) == NULL) {
- tst_brkm(TFAIL, cleanup, "getpwnam(2) of %s Failed", TESTUSER);
- }
+ ltpuser = SAFE_GETPWNAM(cleanup, uid);
+ SAFE_SETEUID(cleanup, ltpuser->pw_uid);
+
+ user_info = SAFE_GETPWNAM(cleanup, uid);
if (!GID_SIZE_CHECK(user_info->pw_gid)) {
tst_brkm(TBROK,
cleanup,
"gid returned from getpwnam is too large for testing setgroups16");
}
+
groups_list[0] = user_info->pw_gid;
- return 0;
}
/*
--
2.33.0
More information about the ltp
mailing list