From: Edward Liaw via ltp <ltp@lists.linux.it>
To: ltp@lists.linux.it
Cc: kernel-team@android.com, rpalethorpe@suse.com
Subject: [LTP] [PATCH v2 1/2] fcntl{34, 36}: Only use fcntl64 with 32bit abi
Date: Thu, 27 Apr 2023 17:43:08 +0000 [thread overview]
Message-ID: <20230427174309.1479093-2-edliaw@google.com> (raw)
In-Reply-To: <20230427174309.1479093-1-edliaw@google.com>
Fixes: 7643115aaacb ("fcntl{34,36}: Always use 64-bit flock struct to avoid EINVAL")
On Android arm64, tst_kernel_bits returns 64, so when compiling with the
32bit abi, the test makes the fcntl syscall instead of fcntl64. The
fcntl syscall is not compatible with the flock64 struct being passed on
arm64 (x86_64 uses compat_sys_fcntl64 whereas arm64 uses sys_fcntl).
Before 7643115aaacb, compiling with FILE_OFFSET_BITS=64 and the 32bit
abi would also use fcntl instead of fcntl64.
This changes it to only use the fcntl64 compat syscall with the 32bit
abi.
Signed-off-by: Edward Liaw <edliaw@google.com>
---
testcases/kernel/syscalls/fcntl/fcntl_common.h | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/testcases/kernel/syscalls/fcntl/fcntl_common.h b/testcases/kernel/syscalls/fcntl/fcntl_common.h
index 5c130a784..56e871167 100644
--- a/testcases/kernel/syscalls/fcntl/fcntl_common.h
+++ b/testcases/kernel/syscalls/fcntl/fcntl_common.h
@@ -10,6 +10,11 @@
#include "lapi/abisize.h"
#include "lapi/fcntl.h"
+#if defined(TST_ABI64)
+#define FCNTL_COMPAT(fd, cmd, flock) \
+ SAFE_FCNTL(fd, cmd, flock)
+
+#else
struct my_flock64 {
int16_t l_type;
int16_t l_whence;
@@ -26,8 +31,7 @@ struct my_flock64 {
* pass the flock sturct directly to the kernel even if it had 32-bit
* offsets.
*
- * Also, if and only if, we are on 32-bit kernel we need to use the
- * fcntl64 compat syscall.
+ * If we are on 32-bit abi we need to use the fcntl64 compat syscall.
*
* See:
* glibc: 06ab719d30 Fix Linux fcntl OFD locks for non-LFS architectures (BZ#20251)
@@ -43,8 +47,8 @@ static inline int fcntl_compat(const char *file, const int line, const char *cmd
.l_len = lck->l_len,
.l_pid = lck->l_pid,
};
- const int sysno = tst_kernel_bits() > 32 ? __NR_fcntl : __NR_fcntl64;
- const int ret = tst_syscall(sysno, fd, cmd, &l64);
+
+ const int ret = tst_syscall(__NR_fcntl64, fd, cmd, &l64);
lck->l_type = l64.l_type;
lck->l_whence = l64.l_whence;
@@ -56,8 +60,7 @@ static inline int fcntl_compat(const char *file, const int line, const char *cmd
return ret;
tst_brk_(file, line, TBROK | TERRNO,
- "%s(%d, %s, { %d, %d, %"PRId64", %"PRId64", %d })",
- tst_kernel_bits() > 32 ? "fcntl" : "fcntl64",
+ "fcntl64(%d, %s, { %d, %d, %"PRId64", %"PRId64", %d })",
fd,
cmd_name,
l64.l_type, l64.l_whence, l64.l_start, l64.l_len, l64.l_pid);
@@ -67,5 +70,6 @@ static inline int fcntl_compat(const char *file, const int line, const char *cmd
#define FCNTL_COMPAT(fd, cmd, flock) \
fcntl_compat(__FILE__, __LINE__, #cmd, fd, cmd, flock)
+#endif
#endif /* FCNTL_COMMON_H__ */
--
2.40.1.495.gc816e09b53d-goog
--
Mailing list info: https://lists.linux.it/listinfo/ltp
next prev parent reply other threads:[~2023-04-27 17:43 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-27 17:43 [LTP] [PATCH v2 0/2] fcntl{34,36}: Fixes for Android arm64 Edward Liaw via ltp
2023-04-27 17:43 ` Edward Liaw via ltp [this message]
2023-04-27 17:49 ` [LTP] [PATCH v2 1/2] fcntl{34, 36}: Only use fcntl64 with 32bit abi Petr Vorel
2023-04-27 17:43 ` [LTP] [PATCH v2 2/2] fcntl{34, 36}: Use arch dependent types for my_flock64 Edward Liaw via ltp
2023-04-27 18:36 ` Petr Vorel
2023-04-28 7:41 ` Petr Vorel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230427174309.1479093-2-edliaw@google.com \
--to=ltp@lists.linux.it \
--cc=edliaw@google.com \
--cc=kernel-team@android.com \
--cc=rpalethorpe@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox