[LTP] [PATCH v3] syscall01: use 32bit syscalls if available
Edward Liaw
edliaw@google.com
Thu Feb 23 02:28:39 CET 2023
For 32-bit applications, the getuid/getgid syscalls return 16-bit ids,
and the getuid32 and getgid32 syscalls return 32-bit ids. When
CONFIG_UID16 is disabled in the kernel, getuid/getgid (16-bit UIDs) are
no longer available. Thus this test will fail when compiled as 32-bit
and with CONFIG_UID16 disabled. For 64-bit applications, this is not an
issue because getuid/getgid return 32-bit ids and getuid32/getgid32 are
not defined.
The fix for this is to use getuid32/getgid32 if they are available to
match the behavior of glibc.
Signed-off-by: Edward Liaw <edliaw@google.com>
---
testcases/kernel/syscalls/syscall/syscall01.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/testcases/kernel/syscalls/syscall/syscall01.c b/testcases/kernel/syscalls/syscall/syscall01.c
index 167e6ee86..76e793221 100644
--- a/testcases/kernel/syscalls/syscall/syscall01.c
+++ b/testcases/kernel/syscalls/syscall/syscall01.c
@@ -37,7 +37,11 @@ static void verify_getuid(void)
uid_t u1, u2;
u1 = getuid();
+#ifdef SYS_getuid32
+ u2 = syscall(SYS_getuid32);
+#else
u2 = syscall(SYS_getuid);
+#endif
if (u1 == u2) {
tst_res(TPASS, "getuid() == syscall(SYS_getuid)");
@@ -52,7 +56,11 @@ static void verify_getgid(void)
gid_t g1, g2;
g1 = getgid();
+#ifdef SYS_getgid32
+ g2 = syscall(SYS_getgid32);
+#else
g2 = syscall(SYS_getgid);
+#endif
if (g1 == g2) {
tst_res(TPASS, "getgid() == syscall(SYS_getgid)");
--
2.39.2.637.g21b0678d19-goog
More information about the ltp
mailing list