From 358e59300cf8275069f46cc70417c2d475bfdd17 Mon Sep 17 00:00:00 2001 From: Edward Liaw via ltp Date: Thu, 23 Feb 2023 01:28:39 +0000 Subject: syscall01: use 32bit syscalls if available 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. Bug: 266732373 Test: vts_ltp_test_x86:syscalls.syscall01_32bit#syscalls.syscall01_32bit -- --abi x86 Change-Id: Ice03210c411b5df687c10687e13a3afc43b16bb0 Signed-off-by: Edward Liaw Reviewed-by: Cyril Hrubis (cherry picked from commit a5d15b796362fd2731fa0290d48c096d370a040d) (cherry picked from commit b55aab9b9388fd22d3a6078a293a164dcc11334d) --- 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)"); -- cgit v1.2.3