diff options
author | Alessio Balsini <balsini@android.com> | 2021-06-25 13:54:47 +0200 |
---|---|---|
committer | Alessio Balsini <balsini@google.com> | 2021-06-28 11:04:02 +0100 |
commit | d8fb78b33624ef3709e6990066d25b971d291439 (patch) | |
tree | dc99b8d2649bf2bbdb34cad32c778ac254a47634 | |
parent | 15ae46528acd0f9608d711129bd6435a0183afb8 (diff) | |
download | ltp-d8fb78b33624ef3709e6990066d25b971d291439.tar.gz |
UPSTREAM: getrlimit/getrlimit03: fix deprecated __NR_getrlimit for armandroid12-dev
__NR_getrlimit has been deprecated from arm EABI, and is only available
if the OABI_COMPAT config option is defined.
This may cause failures with the current test as it assumes that
__NR_getrlimit always exists if __NR_ugetrlimit is defined, but this
assumption does not hold anymore.
Catch this exception by testing if __NR_getrlimit is defined and the
target is arm.
Fixes: #819
Signed-off-by: Alessio Balsini <balsini@android.com>
Reviewed-by: Cyril Hrubis <chrubis@suse.cz>
Signed-off-by: Alessio Balsini <balsini@google.com>
Bug: 189291971
Test: atest vts_ltp_test_arm_lowmem:syscalls.getrlimit03_32bit
(cherry picked from commit b62557c134e934b1f1b1eef8492e6e65ff5e6551)
Change-Id: Iadbaf4fa9574878f64094ff1212ab14584b90518
Merged-In: Iadbaf4fa9574878f64094ff1212ab14584b90518
-rw-r--r-- | testcases/kernel/syscalls/getrlimit/getrlimit03.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/testcases/kernel/syscalls/getrlimit/getrlimit03.c b/testcases/kernel/syscalls/getrlimit/getrlimit03.c index 319bc494a..604082ccf 100644 --- a/testcases/kernel/syscalls/getrlimit/getrlimit03.c +++ b/testcases/kernel/syscalls/getrlimit/getrlimit03.c @@ -35,14 +35,20 @@ * The underlying syscall names vary across architectures, depending on whether * the architecture predates the "new" handler. For clarity, this test * will call them getrlimit_long and getlimit_ulong internally. + * + * __NR_getrlimit has been deprecated from arm EABI and moved to OABI_COMPAT, + * so the syscall on arm may or may not be available even if __NR_ugetrlimit + * exists. */ -#define SIGNED_GETRLIMIT (__NR_ugetrlimit != __LTP__NR_INVALID_SYSCALL) -#if SIGNED_GETRLIMIT -#define __NR_getrlimit_ulong __NR_ugetrlimit -#define __NR_getrlimit_ulong_str "__NR_ugetrlimit" +#if __NR_ugetrlimit != __LTP__NR_INVALID_SYSCALL +# if !defined(__arm__) || __NR_getrlimit != __LTP__NR_INVALID_SYSCALL +# define SIGNED_GETRLIMIT +# endif +# define __NR_getrlimit_ulong __NR_ugetrlimit +# define __NR_getrlimit_ulong_str "__NR_ugetrlimit" #else -#define __NR_getrlimit_ulong __NR_getrlimit -#define __NR_getrlimit_ulong_str "__NR_getrlimit" +# define __NR_getrlimit_ulong __NR_getrlimit +# define __NR_getrlimit_ulong_str "__NR_getrlimit" #endif #ifndef HAVE_STRUCT_RLIMIT64 @@ -74,12 +80,13 @@ static int getrlimit_ulong(int resource, struct rlimit_ulong *rlim) return syscall(__NR_getrlimit_ulong, resource, rlim); } -#if SIGNED_GETRLIMIT +const long RLIM_INFINITY_L = LONG_MAX; + +#ifdef SIGNED_GETRLIMIT struct rlimit_long { long rlim_cur; long rlim_max; }; -const long RLIM_INFINITY_L = LONG_MAX; static int getrlimit_long(int resource, struct rlimit_long *rlim) { @@ -116,7 +123,7 @@ static int compare_u64_ulong(int resource, uint64_t val_u64, return 0; } -#if SIGNED_GETRLIMIT +#ifdef SIGNED_GETRLIMIT static int compare_u64_long(int resource, uint64_t val_u64, long val_l, const char *kind) { @@ -142,7 +149,7 @@ static void run(unsigned int resource) int ret_ul; int errno_ul; -#if SIGNED_GETRLIMIT +#ifdef SIGNED_GETRLIMIT struct rlimit_long rlim_l; int ret_l; int errno_l; @@ -167,7 +174,7 @@ static void run(unsigned int resource) tst_res(TPASS, "__NR_prlimit64(%d) and %s(%d) gave consistent results", resource, __NR_getrlimit_ulong_str, resource); -#if SIGNED_GETRLIMIT +#ifdef SIGNED_GETRLIMIT errno = 0; ret_l = getrlimit_long(resource, &rlim_l); errno_l = errno; |