* [LTP] [PATCH v2 0/2] Refactor getegid testing suite
@ 2023-09-08 14:14 Andrea Cervesato
2023-09-08 14:14 ` [LTP] [PATCH v2 1/2] Refactor getegid01 using new LTP API Andrea Cervesato
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Andrea Cervesato @ 2023-09-08 14:14 UTC (permalink / raw)
To: ltp
From: Andrea Cervesato <andrea.cervesato@suse.com>
The getegid testing suite has been refactored using new LTP API, optimising the
code by adding some other checks.
Andrea Cervesato (2):
Refactor getegid01 using new LTP API
Refactor getegid02 using new LTP API
testcases/kernel/syscalls/getegid/getegid01.c | 95 ++++---------------
testcases/kernel/syscalls/getegid/getegid02.c | 93 ++++--------------
2 files changed, 41 insertions(+), 147 deletions(-)
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 8+ messages in thread
* [LTP] [PATCH v2 1/2] Refactor getegid01 using new LTP API
2023-09-08 14:14 [LTP] [PATCH v2 0/2] Refactor getegid testing suite Andrea Cervesato
@ 2023-09-08 14:14 ` Andrea Cervesato
2023-09-08 14:14 ` [LTP] [PATCH v2 2/2] Refactor getegid02 " Andrea Cervesato
2023-10-17 8:24 ` [LTP] [PATCH v2 0/2] Refactor getegid testing suite Richard Palethorpe
2 siblings, 0 replies; 8+ messages in thread
From: Andrea Cervesato @ 2023-09-08 14:14 UTC (permalink / raw)
To: ltp
From: Andrea Cervesato <andrea.cervesato@suse.com>
This new version also verifies that getegid() effectively returns the
right effective group ID by looking at /proc/self/status information.
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
testcases/kernel/syscalls/getegid/getegid01.c | 95 ++++---------------
1 file changed, 20 insertions(+), 75 deletions(-)
diff --git a/testcases/kernel/syscalls/getegid/getegid01.c b/testcases/kernel/syscalls/getegid/getegid01.c
index 271fbb6b6..46cdc680b 100644
--- a/testcases/kernel/syscalls/getegid/getegid01.c
+++ b/testcases/kernel/syscalls/getegid/getegid01.c
@@ -1,87 +1,32 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
- *
+ * William Roske, Dave Fenner
+ * Copyright (C) 2023 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
*/
-/*
- * AUTHOR : William Roske
- * CO-PILOT : Dave Fenner
+/*\
+ * [Description]
+ *
+ * This test checks if getegid() returns the effective group id.
*/
-#include <sys/types.h>
-#include <errno.h>
-#include <string.h>
-#include <signal.h>
-
-#include "test.h"
-#include "compat_16.h"
-
-static void setup();
-static void cleanup();
+#include "tst_test.h"
+#include "compat_tst_16.h"
-TCID_DEFINE(getegid01);
-int TST_TOTAL = 1;
-
-int main(int ac, char **av)
+static void run(void)
{
- int lc;
-
- tst_parse_opts(ac, av, NULL, NULL);
-
- setup();
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
-
- tst_count = 0;
-
- TEST(GETEGID(cleanup));
+ gid_t gid, st_egid;
- if (TEST_RETURN == -1) {
- tst_resm(TFAIL | TTERRNO, "getegid failed");
- continue; /* next loop for MTKERNEL */
- }
+ SAFE_FILE_LINES_SCANF("/proc/self/status", "Gid: %*d %d", &st_egid);
+ gid = getegid();
- tst_resm(TPASS, "getegid returned %ld", TEST_RETURN);
- }
-
- cleanup();
- tst_exit();
-}
-
-static void setup(void)
-{
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
- TEST_PAUSE;
+ if (GID_SIZE_CHECK(st_egid))
+ TST_EXP_EQ_LI(gid, st_egid);
+ else
+ tst_res(TPASS, "getegid() passed");
}
-static void cleanup(void)
-{
-}
+static struct tst_test test = {
+ .test_all = run,
+};
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [LTP] [PATCH v2 2/2] Refactor getegid02 using new LTP API
2023-09-08 14:14 [LTP] [PATCH v2 0/2] Refactor getegid testing suite Andrea Cervesato
2023-09-08 14:14 ` [LTP] [PATCH v2 1/2] Refactor getegid01 using new LTP API Andrea Cervesato
@ 2023-09-08 14:14 ` Andrea Cervesato
2023-10-17 11:35 ` Petr Vorel
2023-10-17 11:40 ` Petr Vorel
2023-10-17 8:24 ` [LTP] [PATCH v2 0/2] Refactor getegid testing suite Richard Palethorpe
2 siblings, 2 replies; 8+ messages in thread
From: Andrea Cervesato @ 2023-09-08 14:14 UTC (permalink / raw)
To: ltp
From: Andrea Cervesato <andrea.cervesato@suse.com>
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
testcases/kernel/syscalls/getegid/getegid02.c | 93 +++++--------------
1 file changed, 21 insertions(+), 72 deletions(-)
diff --git a/testcases/kernel/syscalls/getegid/getegid02.c b/testcases/kernel/syscalls/getegid/getegid02.c
index 60f09501e..2f64bd869 100644
--- a/testcases/kernel/syscalls/getegid/getegid02.c
+++ b/testcases/kernel/syscalls/getegid/getegid02.c
@@ -1,90 +1,39 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
/*
- * Copyright (c) International Business Machines Corp., 2001
- * Ported by Wayne Boyer
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
- * the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
+ * William Roske, Dave Fenner
+ * Copyright (C) 2023 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
*/
-/*
- * Testcase to check the basic functionality of getegid().
+/*\
+ * [Description]
*
- * For functionality test the return value from getegid() is compared to passwd
- * entry.
+ * This test checks if getegid() returns the same effective group given by
+ * passwd entry via getpwuid().
*/
#include <pwd.h>
-#include <errno.h>
-
-#include "test.h"
-#include "compat_16.h"
-static void cleanup(void);
-static void setup(void);
+#include "tst_test.h"
+#include "compat_tst_16.h"
-TCID_DEFINE(getegid02);
-int TST_TOTAL = 1;
-
-int main(int ac, char **av)
+static void run(void)
{
- int lc;
uid_t euid;
+ gid_t egid;
struct passwd *pwent;
- tst_parse_opts(ac, av, NULL, NULL);
-
- setup();
-
- for (lc = 0; TEST_LOOPING(lc); lc++) {
- tst_count = 0;
-
- TEST(GETEGID(cleanup));
+ UID16_CHECK((euid = geteuid()), "geteuid");
- if (TEST_RETURN < 0) {
- tst_brkm(TBROK, cleanup, "This should never happen");
- }
+ pwent = getpwuid(euid);
+ if (!pwent)
+ tst_brk(TBROK | TERRNO, "getpwuid() error");
- euid = geteuid();
- pwent = getpwuid(euid);
+ GID16_CHECK((egid = getegid()), "getegid");
- if (pwent == NULL)
- tst_brkm(TBROK, cleanup, "geteuid() returned "
- "unexpected value %d", euid);
-
- GID16_CHECK(pwent->pw_gid, getegid, cleanup);
-
- if (pwent->pw_gid != TEST_RETURN) {
- tst_resm(TFAIL, "getegid() return value"
- " %ld unexpected - expected %d",
- TEST_RETURN, pwent->pw_gid);
- } else {
- tst_resm(TPASS,
- "effective group id %ld "
- "is correct", TEST_RETURN);
- }
- }
-
- cleanup();
- tst_exit();
-}
-
-static void setup(void)
-{
- tst_sig(NOFORK, DEF_HANDLER, cleanup);
- TEST_PAUSE;
+ TST_EXP_EQ_LI(pwent->pw_gid, egid);
}
-static void cleanup(void)
-{
-}
+static struct tst_test test = {
+ .test_all = run,
+};
--
2.35.3
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [LTP] [PATCH v2 0/2] Refactor getegid testing suite
2023-09-08 14:14 [LTP] [PATCH v2 0/2] Refactor getegid testing suite Andrea Cervesato
2023-09-08 14:14 ` [LTP] [PATCH v2 1/2] Refactor getegid01 using new LTP API Andrea Cervesato
2023-09-08 14:14 ` [LTP] [PATCH v2 2/2] Refactor getegid02 " Andrea Cervesato
@ 2023-10-17 8:24 ` Richard Palethorpe
2 siblings, 0 replies; 8+ messages in thread
From: Richard Palethorpe @ 2023-10-17 8:24 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp
Hello,
Pushed! Thanks!
Andrea Cervesato <andrea.cervesato@suse.de> writes:
> From: Andrea Cervesato <andrea.cervesato@suse.com>
>
> The getegid testing suite has been refactored using new LTP API, optimising the
> code by adding some other checks.
>
> Andrea Cervesato (2):
> Refactor getegid01 using new LTP API
> Refactor getegid02 using new LTP API
>
> testcases/kernel/syscalls/getegid/getegid01.c | 95 ++++---------------
> testcases/kernel/syscalls/getegid/getegid02.c | 93 ++++--------------
> 2 files changed, 41 insertions(+), 147 deletions(-)
>
> --
> 2.35.3
--
Thank you,
Richard.
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [LTP] [PATCH v2 2/2] Refactor getegid02 using new LTP API
2023-09-08 14:14 ` [LTP] [PATCH v2 2/2] Refactor getegid02 " Andrea Cervesato
@ 2023-10-17 11:35 ` Petr Vorel
2023-10-17 12:41 ` Cyril Hrubis
2023-10-17 11:40 ` Petr Vorel
1 sibling, 1 reply; 8+ messages in thread
From: Petr Vorel @ 2023-10-17 11:35 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: Richard Palethorpe, ltp
Hi all,
This code is based on Cyril's suggestion in v1 [1]
if (GID_SIZE_CHECK(st_egid))
TST_EXP_EQ_LI(gid, st_egid);
else
tst_res(TPASS, "getegid() passed");
I wonder which system returns 16 bit gid?
man getgid(2) says that originally there was only 16 bit, than kernel 2.4 added
support for 32 bit and the glibc getegid() wrapper transparently deal with this.
Because even I compile as 32 bit:
$ file getegid01_16
getegid01_16: ELF 32-bit LSB pie executable, Intel 80386
I get comparison, thus 32 bit:
$ ./getegid01_16
...
getegid01.c:25: TPASS: gid == st_egid (1000)
What am I missing?
Kind regards,
Petr
[1] https://lore.kernel.org/ltp/ZPCWWXXHG-oEB5qO@yuki/
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [LTP] [PATCH v2 2/2] Refactor getegid02 using new LTP API
2023-09-08 14:14 ` [LTP] [PATCH v2 2/2] Refactor getegid02 " Andrea Cervesato
2023-10-17 11:35 ` Petr Vorel
@ 2023-10-17 11:40 ` Petr Vorel
1 sibling, 0 replies; 8+ messages in thread
From: Petr Vorel @ 2023-10-17 11:40 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp
Hi Andrea,
> /*
> - * Copyright (c) International Business Machines Corp., 2001
> - * Ported by Wayne Boyer
> - *
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License as published by
> - * the Free Software Foundation; either version 2 of the License, or
> - * (at your option) any later version.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
> - * the GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> + * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
> + * William Roske, Dave Fenner
These two developers were mentioned only in getegid01.c IMHO it should have not
been here. Copy paste error?
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [LTP] [PATCH v2 2/2] Refactor getegid02 using new LTP API
2023-10-17 11:35 ` Petr Vorel
@ 2023-10-17 12:41 ` Cyril Hrubis
2023-10-17 12:41 ` Petr Vorel
0 siblings, 1 reply; 8+ messages in thread
From: Cyril Hrubis @ 2023-10-17 12:41 UTC (permalink / raw)
To: Petr Vorel; +Cc: ltp, Richard Palethorpe
Hi!
> This code is based on Cyril's suggestion in v1 [1]
> if (GID_SIZE_CHECK(st_egid))
> TST_EXP_EQ_LI(gid, st_egid);
> else
> tst_res(TPASS, "getegid() passed");
>
> I wonder which system returns 16 bit gid?
>
> man getgid(2) says that originally there was only 16 bit, than kernel 2.4 added
> support for 32 bit and the glibc getegid() wrapper transparently deal with this.
>
> Because even I compile as 32 bit:
>
> $ file getegid01_16
> getegid01_16: ELF 32-bit LSB pie executable, Intel 80386
>
> I get comparison, thus 32 bit:
> $ ./getegid01_16
> ...
> getegid01.c:25: TPASS: gid == st_egid (1000)
>
> What am I missing?
This obviously works since 1000 < 32767. As long as the GID fits 16bit
integer everything works fine with 16bit syscalls. The check returns if
the egid does fit and returns true if so.
When the GID does not fit, kernel returns overflow GID, i.e. for all
values bigger than 16 bit you get the same GID value that does not
correspond to the actual GID value at all.
So to make the check false, you have to set up the test user so that it
has GID > 16bit integer maximum value.
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [LTP] [PATCH v2 2/2] Refactor getegid02 using new LTP API
2023-10-17 12:41 ` Cyril Hrubis
@ 2023-10-17 12:41 ` Petr Vorel
0 siblings, 0 replies; 8+ messages in thread
From: Petr Vorel @ 2023-10-17 12:41 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: ltp, Richard Palethorpe
> Hi!
> > This code is based on Cyril's suggestion in v1 [1]
> > if (GID_SIZE_CHECK(st_egid))
> > TST_EXP_EQ_LI(gid, st_egid);
> > else
> > tst_res(TPASS, "getegid() passed");
> > I wonder which system returns 16 bit gid?
> > man getgid(2) says that originally there was only 16 bit, than kernel 2.4 added
> > support for 32 bit and the glibc getegid() wrapper transparently deal with this.
> > Because even I compile as 32 bit:
> > $ file getegid01_16
> > getegid01_16: ELF 32-bit LSB pie executable, Intel 80386
> > I get comparison, thus 32 bit:
> > $ ./getegid01_16
> > ...
> > getegid01.c:25: TPASS: gid == st_egid (1000)
> > What am I missing?
> This obviously works since 1000 < 32767. As long as the GID fits 16bit
> integer everything works fine with 16bit syscalls. The check returns if
> the egid does fit and returns true if so.
> When the GID does not fit, kernel returns overflow GID, i.e. for all
> values bigger than 16 bit you get the same GID value that does not
> correspond to the actual GID value at all.
> So to make the check false, you have to set up the test user so that it
> has GID > 16bit integer maximum value.
Thanks a lot, Cyril!
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-10-17 12:42 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-09-08 14:14 [LTP] [PATCH v2 0/2] Refactor getegid testing suite Andrea Cervesato
2023-09-08 14:14 ` [LTP] [PATCH v2 1/2] Refactor getegid01 using new LTP API Andrea Cervesato
2023-09-08 14:14 ` [LTP] [PATCH v2 2/2] Refactor getegid02 " Andrea Cervesato
2023-10-17 11:35 ` Petr Vorel
2023-10-17 12:41 ` Cyril Hrubis
2023-10-17 12:41 ` Petr Vorel
2023-10-17 11:40 ` Petr Vorel
2023-10-17 8:24 ` [LTP] [PATCH v2 0/2] Refactor getegid testing suite Richard Palethorpe
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox