summaryrefslogtreecommitdiffstats
path: root/meta/recipes-extended
diff options
context:
space:
mode:
authorHongzhi.Song <hongzhi.song@windriver.com>2018-09-15 23:57:25 -0400
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-09-21 18:45:46 -0700
commit4653abec824550c91a5f55f69c7cbd3afc4ca5fb (patch)
tree40a8544bd6f210d54f24b6c136a32831fec396ed /meta/recipes-extended
parent13f2911a3dbf8201a513229b2ed9861e583a58ef (diff)
downloadpoky-4653abec824550c91a5f55f69c7cbd3afc4ca5fb.tar.gz
ltp: add a patch for source code to fix issue about fcntl
The testcases of fcntl fail on 32-bit arch To cope with glibc commit: 06ab719d30b0 ("Fix Linux fcntl OFD locks for non-LFS architectures (BZ#20251)") Make OFD command use fcntl64() syscall on 32-bit. (From OE-Core rev: 67fca07c9487ccd1a28357da32c9987c00d1ba77) Signed-off-by: Hongzhi.Song <hongzhi.song@windriver.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-extended')
-rw-r--r--meta/recipes-extended/ltp/ltp/0001-syscalls-fcntl-make-OFD-command-use-fcntl64-syscall-.patch184
-rw-r--r--meta/recipes-extended/ltp/ltp_20180515.bb1
2 files changed, 185 insertions, 0 deletions
diff --git a/meta/recipes-extended/ltp/ltp/0001-syscalls-fcntl-make-OFD-command-use-fcntl64-syscall-.patch b/meta/recipes-extended/ltp/ltp/0001-syscalls-fcntl-make-OFD-command-use-fcntl64-syscall-.patch
new file mode 100644
index 0000000000..2755596d03
--- /dev/null
+++ b/meta/recipes-extended/ltp/ltp/0001-syscalls-fcntl-make-OFD-command-use-fcntl64-syscall-.patch
@@ -0,0 +1,184 @@
1From 8de03ea1200480b922d5ba05b69dc94db60496f5 Mon Sep 17 00:00:00 2001
2From: "Hongzhi.Song" <hongzhi.song@windriver.com>
3Date: Sat, 15 Sep 2018 22:39:32 -0400
4Subject: [PATCH] syscalls/fcntl: make OFD command use fcntl64() syscall on
5 32-bit
6
7To cope with glibc commit:
8 06ab719d30b0 ("Fix Linux fcntl OFD locks for non-LFS architectures
9(BZ#20251)")
10
11WIP: Still need to test this with new glibc.
12 Test with old glibc look OK so far.
13
14Signed-off-by: Jan Stancek <jstancek@redhat.com>
15
16Upstream-Status: Backport
17 Backported from upstream maillist
18 https://lists.linux.it/pipermail/ltp/2018-September/009370.html
19
20Signed-off-by: Hongzhi Song <hongzhi.song@windriver.com>
21---
22 testcases/kernel/syscalls/fcntl/fcntl34.c | 12 +++++++---
23 testcases/kernel/syscalls/fcntl/fcntl36.c | 23 +++++++++++++-----
24 testcases/kernel/syscalls/fcntl/fcntl_common.h | 32 ++++++++++++++++++++++++++
25 3 files changed, 58 insertions(+), 9 deletions(-)
26 create mode 100644 testcases/kernel/syscalls/fcntl/fcntl_common.h
27
28diff --git a/testcases/kernel/syscalls/fcntl/fcntl34.c b/testcases/kernel/syscalls/fcntl/fcntl34.c
29index aa29cf9..109f834 100644
30--- a/testcases/kernel/syscalls/fcntl/fcntl34.c
31+++ b/testcases/kernel/syscalls/fcntl/fcntl34.c
32@@ -28,6 +28,7 @@
33 #include "lapi/fcntl.h"
34 #include "tst_safe_pthread.h"
35 #include "tst_test.h"
36+#include "fcntl_common.h"
37
38 static int thread_cnt;
39 static const int max_thread_cnt = 32;
40@@ -68,7 +69,12 @@ void *thread_fn_01(void *arg)
41
42 memset(buf, (intptr_t)arg, write_size);
43
44- struct flock64 lck = {
45+ /* see explanation in fcntl_common.h */
46+ #ifdef USE_STRUCT_FLOCK
47+ struct flock lck = {
48+ #else
49+ struct flock64 lck = {
50+ #endif
51 .l_whence = SEEK_SET,
52 .l_start = 0,
53 .l_len = 1,
54@@ -76,13 +82,13 @@ void *thread_fn_01(void *arg)
55
56 for (i = 0; i < writes_num; ++i) {
57 lck.l_type = F_WRLCK;
58- SAFE_FCNTL(fd, F_OFD_SETLKW, &lck);
59+ my_fcntl(fd, F_OFD_SETLKW, &lck);
60
61 SAFE_LSEEK(fd, 0, SEEK_END);
62 SAFE_WRITE(1, fd, buf, write_size);
63
64 lck.l_type = F_UNLCK;
65- SAFE_FCNTL(fd, F_OFD_SETLKW, &lck);
66+ my_fcntl(fd, F_OFD_SETLKW, &lck);
67
68 sched_yield();
69 }
70diff --git a/testcases/kernel/syscalls/fcntl/fcntl36.c b/testcases/kernel/syscalls/fcntl/fcntl36.c
71index 3246d13..f263b6b 100644
72--- a/testcases/kernel/syscalls/fcntl/fcntl36.c
73+++ b/testcases/kernel/syscalls/fcntl/fcntl36.c
74@@ -57,6 +57,7 @@
75 #include "lapi/fcntl.h"
76 #include "tst_safe_pthread.h"
77 #include "tst_test.h"
78+#include "fcntl_common.h"
79
80 static int thread_cnt;
81 static int fail_flag = 0;
82@@ -87,7 +88,12 @@ static void *fn_ofd_w(void *arg)
83 int fd = SAFE_OPEN(fname, O_RDWR);
84 long wt = pa->cnt;
85
86- struct flock64 lck = {
87+ /* see explanation in fcntl_common.h */
88+ #ifdef USE_STRUCT_FLOCK
89+ struct flock lck = {
90+ #else
91+ struct flock64 lck = {
92+ #endif
93 .l_whence = SEEK_SET,
94 .l_start = pa->offset,
95 .l_len = pa->length,
96@@ -99,13 +105,13 @@ static void *fn_ofd_w(void *arg)
97 memset(buf, wt, pa->length);
98
99 lck.l_type = F_WRLCK;
100- SAFE_FCNTL(fd, F_OFD_SETLKW, &lck);
101+ my_fcntl(fd, F_OFD_SETLKW, &lck);
102
103 SAFE_LSEEK(fd, pa->offset, SEEK_SET);
104 SAFE_WRITE(1, fd, buf, pa->length);
105
106 lck.l_type = F_UNLCK;
107- SAFE_FCNTL(fd, F_OFD_SETLKW, &lck);
108+ my_fcntl(fd, F_OFD_SETLKW, &lck);
109
110 wt++;
111 if (wt >= 255)
112@@ -166,7 +172,12 @@ static void *fn_ofd_r(void *arg)
113 int i;
114 int fd = SAFE_OPEN(fname, O_RDWR);
115
116- struct flock64 lck = {
117+ /* see explanation in fcntl_common.h */
118+ #ifdef USE_STRUCT_FLOCK
119+ struct flock lck = {
120+ #else
121+ struct flock64 lck = {
122+ #endif
123 .l_whence = SEEK_SET,
124 .l_start = pa->offset,
125 .l_len = pa->length,
126@@ -178,7 +189,7 @@ static void *fn_ofd_r(void *arg)
127 memset(buf, 0, pa->length);
128
129 lck.l_type = F_RDLCK;
130- SAFE_FCNTL(fd, F_OFD_SETLKW, &lck);
131+ my_fcntl(fd, F_OFD_SETLKW, &lck);
132
133 /* rlock acquired */
134 SAFE_LSEEK(fd, pa->offset, SEEK_SET);
135@@ -209,7 +220,7 @@ static void *fn_ofd_r(void *arg)
136 }
137
138 lck.l_type = F_UNLCK;
139- SAFE_FCNTL(fd, F_OFD_SETLK, &lck);
140+ my_fcntl(fd, F_OFD_SETLK, &lck);
141
142 sched_yield();
143 }
144diff --git a/testcases/kernel/syscalls/fcntl/fcntl_common.h b/testcases/kernel/syscalls/fcntl/fcntl_common.h
145new file mode 100644
146index 0000000..3fe399b
147--- /dev/null
148+++ b/testcases/kernel/syscalls/fcntl/fcntl_common.h
149@@ -0,0 +1,32 @@
150+#include "lapi/syscalls.h"
151+
152+/*
153+ * glibc commit:
154+ * 06ab719d30b0 ("Fix Linux fcntl OFD locks for non-LFS architectures (BZ#20251)")
155+ * changed behavior of arg parameter for OFD commands. It is no
156+ * longer passing arg directly to syscall, but expects it to be
157+ * 'struct flock'.
158+ *
159+ * On 64-bit or _FILE_OFFSET_BITS == 64 we can use fcntl() and
160+ * struct flock with any glibc version. struct flock and flock64
161+ * should be identical.
162+ *
163+ * On 32-bit, older glibc would pass arg directly, recent one treats
164+ * it as 'struct flock' and converts it to 'struct flock64'.
165+ * So, for 32-bit we use fcntl64 syscall directly with struct flock64.
166+ */
167+#if __WORDSIZE == 64 || _FILE_OFFSET_BITS == 64
168+#define USE_STRUCT_FLOCK
169+static int my_fcntl(int fd, int cmd, void *lck)
170+{
171+ return SAFE_FCNTL(fd, cmd, lck);
172+}
173+#else
174+static int my_fcntl(int fd, int cmd, void *lck)
175+{
176+ int ret = tst_syscall(__NR_fcntl64, fd, cmd, lck);
177+ if (ret == -1)
178+ tst_brk(TBROK|TERRNO, "fcntl64");
179+ return ret;
180+}
181+#endif
182--
1832.8.1
184
diff --git a/meta/recipes-extended/ltp/ltp_20180515.bb b/meta/recipes-extended/ltp/ltp_20180515.bb
index 9cd3489722..ce86f7f14b 100644
--- a/meta/recipes-extended/ltp/ltp_20180515.bb
+++ b/meta/recipes-extended/ltp/ltp_20180515.bb
@@ -52,6 +52,7 @@ SRC_URI = "git://github.com/linux-test-project/ltp.git \
52 file://0041-cve-2017-5669-shmat-for-0-or-PAGESIZE-with-RND-flag-.patch \ 52 file://0041-cve-2017-5669-shmat-for-0-or-PAGESIZE-with-RND-flag-.patch \
53 file://0042-fs-ftest-ftest06.c-Fix-too-small-name-string-and-rel.patch \ 53 file://0042-fs-ftest-ftest06.c-Fix-too-small-name-string-and-rel.patch \
54 file://0043-open-creat-skip-S_ISGID-check-on-files-created-by-no.patch \ 54 file://0043-open-creat-skip-S_ISGID-check-on-files-created-by-no.patch \
55 file://0001-syscalls-fcntl-make-OFD-command-use-fcntl64-syscall-.patch \
55 " 56 "
56 57
57S = "${WORKDIR}/git" 58S = "${WORKDIR}/git"