diff mbox series

[v3,1/1] package/ltp-testsuite: proper fix for missing __kernel_fsid_t

Message ID 20191116003638.7666-1-petr.vorel@gmail.com
State Accepted
Headers show
Series [v3,1/1] package/ltp-testsuite: proper fix for missing __kernel_fsid_t | expand

Commit Message

Petr Vorel Nov. 16, 2019, 12:36 a.m. UTC
Backported 4 fixes from upstream (2 of them require calling autoreconf).

Fixes: http://autobuild.buildroot.net/results/7a29e3b767e3d23dd64c130daa735ca6c062baf8

Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
---
Hi,

regression found and sent upstream [1], see notes there.
I'd prefer merging this after it's merged upstream.

Various tests run:
pc_x86_64_bios_defconfig with changed libc to musl (the one with
BR2_TOOLCHAIN_BUILDROOT_MUSL=y, which failed).

MUSL with BR2_TOOLCHAIN_EXTERNAL_MUSL=y (worked previously)
                          br-x86-64-musl [1/5]: OK
                   br-arm-cortex-a9-musl [2/5]: OK
                br-i386-pentium-mmx-musl [3/5]: OK
                      br-arm-full-static [4/5]: OK
                             br-arm-full [5/5]: OK

Also checked the default LTP travis build [2].

[1] https://patchwork.ozlabs.org/patch/1195915/
[2] https://travis-ci.org/pevik/ltp/builds/612641003

 ...x-missing-__kernel_fsid_t-definition.patch |  41 -------
 ...kernel_fsid_t-definition-to-correct-.patch |  61 ++++++++++
 ...work-checks-for-fallback-definitions.patch |  91 +++++++++++++++
 ...val-vs.-__val-fanotify_event_info_fi.patch | 108 ++++++++++++++++++
 .../0007-fanotify-Fix-for-musl.patch          |  30 +++++
 package/ltp-testsuite/ltp-testsuite.mk        |   4 +
 6 files changed, 294 insertions(+), 41 deletions(-)
 delete mode 100644 package/ltp-testsuite/0004-fanotify-Fix-missing-__kernel_fsid_t-definition.patch
 create mode 100644 package/ltp-testsuite/0004-fanotify-Move-__kernel_fsid_t-definition-to-correct-.patch
 create mode 100644 package/ltp-testsuite/0005-fanotify-Rework-checks-for-fallback-definitions.patch
 create mode 100644 package/ltp-testsuite/0006-fanotify-Detect-val-vs.-__val-fanotify_event_info_fi.patch
 create mode 100644 package/ltp-testsuite/0007-fanotify-Fix-for-musl.patch

Comments

Yann E. MORIN Nov. 16, 2019, 9:42 a.m. UTC | #1
Petr, All,

On 2019-11-16 01:36 +0100, Petr Vorel spake thusly:
> Backported 4 fixes from upstream (2 of them require calling autoreconf).
> 
> Fixes: http://autobuild.buildroot.net/results/7a29e3b767e3d23dd64c130daa735ca6c062baf8
> 
> Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
[--SNIP--]
> regression found and sent upstream [1], see notes there.
> I'd prefer merging this after it's merged upstream.
[--SNIP--]
> [1] https://patchwork.ozlabs.org/patch/1195915/

I've added this URL to the description of patch 7, and applied to
master, thanks.

Regards,
Yann E. MORIN.
Petr Vorel Nov. 17, 2019, 9:24 a.m. UTC | #2
Hi Yann,

> [--SNIP--]
> > [1] https://patchwork.ozlabs.org/patch/1195915/

> I've added this URL to the description of patch 7, and applied to
> master, thanks.
Thanks! I'll probably merge patch [1] in LTP on Monday (already Acked by Jan
Stancek, pretty obvious, but I'll prefer to wait Cyril Hrubis ack).

Not sure if it's worth then add commit hash in buildroot patch and renumber
patches (0005 was already taken by static linking fix), I guess these are minor
and not needed to be done. Anyway, these are 3 are backports thus temporary.

Kind regards,
Petr
diff mbox series

Patch

diff --git a/package/ltp-testsuite/0004-fanotify-Fix-missing-__kernel_fsid_t-definition.patch b/package/ltp-testsuite/0004-fanotify-Fix-missing-__kernel_fsid_t-definition.patch
deleted file mode 100644
index 7450a0af9c..0000000000
--- a/package/ltp-testsuite/0004-fanotify-Fix-missing-__kernel_fsid_t-definition.patch
+++ /dev/null
@@ -1,41 +0,0 @@ 
-From b8aebc83523691be2b37e87c62099d700b0473c7 Mon Sep 17 00:00:00 2001
-From: Petr Vorel <petr.vorel@gmail.com>
-Date: Mon, 14 Oct 2019 15:35:53 +0200
-Subject: [PATCH] fanotify: Fix missing __kernel_fsid_t definition
-
-which is needed for fallback definition when FAN_REPORT_FID is missing.
-Instead of including <asm/posix_types.h> where it's defined we just
-define the missing bit.
-
-This fixes build error at least on musl.
-
-Acked-by: Cyril Hrubis <chrubis@suse.cz>
-Acked-by: Jan Stancek <jstancek@redhat.com>
-Suggested-by: Jan Stancek <jstancek@redhat.com>
-Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
-[Upstream status: b8aebc83523691be2b37e87c62099d700b0473c7]
----
- testcases/kernel/syscalls/fanotify/fanotify.h | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/testcases/kernel/syscalls/fanotify/fanotify.h b/testcases/kernel/syscalls/fanotify/fanotify.h
-index 1c7623d3b..435f100d8 100644
---- a/testcases/kernel/syscalls/fanotify/fanotify.h
-+++ b/testcases/kernel/syscalls/fanotify/fanotify.h
-@@ -126,6 +126,13 @@ struct fanotify_event_info_header {
- };
- 
- #ifdef HAVE_NAME_TO_HANDLE_AT
-+#ifndef __kernel_fsid_t
-+typedef struct {
-+	int	val[2];
-+} lapi_fsid_t;
-+#define __kernel_fsid_t lapi_fsid_t
-+#endif
-+
- struct fanotify_event_info_fid {
- 	struct fanotify_event_info_header hdr;
- 	__kernel_fsid_t fsid;
--- 
-2.23.0
-
diff --git a/package/ltp-testsuite/0004-fanotify-Move-__kernel_fsid_t-definition-to-correct-.patch b/package/ltp-testsuite/0004-fanotify-Move-__kernel_fsid_t-definition-to-correct-.patch
new file mode 100644
index 0000000000..a3d4d944f0
--- /dev/null
+++ b/package/ltp-testsuite/0004-fanotify-Move-__kernel_fsid_t-definition-to-correct-.patch
@@ -0,0 +1,61 @@ 
+From 399bb8193f0e09f00d83602bda0c175f2e2b0958 Mon Sep 17 00:00:00 2001
+From: Petr Vorel <petr.vorel@gmail.com>
+Date: Mon, 4 Nov 2019 22:14:26 +0100
+Subject: [PATCH 1/3] fanotify: Move __kernel_fsid_t definition to correct
+ place
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This fixes errors:
+
+fanotify.h:149:55: error: unknown type name ‘__kernel_fsid_t’
+ static inline void fanotify_get_fid(const char *path, __kernel_fsid_t *fsid,
+                                                       ^~~~~~~~~~~~~~~
+fanotify13.c:47:2: error: unknown type name ‘__kernel_fsid_t’
+  __kernel_fsid_t fsid;
+
+Remove #ifdef HAVE_NAME_TO_HANDLE_AT wrap of __kernel_fsid_t fallback
+definition to simplify preprocessor checks.
+
+Fixes: b8aebc835 ("fanotify: Fix missing __kernel_fsid_t definition")
+
+Acked-by: Cyril Hrubis <chrubis@suse.cz>
+Acked-by: Jan Stancek <jstancek@redhat.com>
+Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
+[Upstream status: 399bb8193f0e09f00d83602bda0c175f2e2b0958]
+---
+ testcases/kernel/syscalls/fanotify/fanotify.h | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/testcases/kernel/syscalls/fanotify/fanotify.h b/testcases/kernel/syscalls/fanotify/fanotify.h
+index 1c7623d3b..573ed5f59 100644
+--- a/testcases/kernel/syscalls/fanotify/fanotify.h
++++ b/testcases/kernel/syscalls/fanotify/fanotify.h
+@@ -116,6 +116,13 @@ struct fanotify_mark_type {
+	const char * name;
+ };
+
++#ifndef __kernel_fsid_t
++typedef struct {
++	int	val[2];
++} lapi_fsid_t;
++#define __kernel_fsid_t lapi_fsid_t
++#endif /* __kernel_fsid_t */
++
+ #ifndef FAN_REPORT_FID
+ #define FAN_REPORT_FID		0x00000200
+
+@@ -131,8 +138,8 @@ struct fanotify_event_info_fid {
+	__kernel_fsid_t fsid;
+	unsigned char handle[0];
+ };
+-#endif
+-#endif
++#endif /* HAVE_NAME_TO_HANDLE_AT */
++#endif /* ! FAN_REPORT_FID */
+
+ #ifdef HAVE_NAME_TO_HANDLE_AT
+ /*
+--
+2.24.0
diff --git a/package/ltp-testsuite/0005-fanotify-Rework-checks-for-fallback-definitions.patch b/package/ltp-testsuite/0005-fanotify-Rework-checks-for-fallback-definitions.patch
new file mode 100644
index 0000000000..47c56996fa
--- /dev/null
+++ b/package/ltp-testsuite/0005-fanotify-Rework-checks-for-fallback-definitions.patch
@@ -0,0 +1,91 @@ 
+From bf02784428c1e61e8b227c0e565992bfae36d301 Mon Sep 17 00:00:00 2001
+From: Petr Vorel <petr.vorel@gmail.com>
+Date: Tue, 12 Nov 2019 23:18:32 +0100
+Subject: [PATCH 2/3] fanotify: Rework checks for fallback definitions
+
+Add autoconf checks for struct fanotify_event_info_fid
+and struct fanotify_event_info_header.
+
+Instead of detecting via FAN_REPORT_FID or HAVE_NAME_TO_HANDLE_AT.
+
+Acked-by: Cyril Hrubis <chrubis@suse.cz>
+Acked-by: Jan Stancek <jstancek@redhat.com>
+Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
+[Upstream status: bf02784428c1e61e8b227c0e565992bfae36d301]
+---
+ configure.ac                                  |  1 +
+ m4/ltp-fanotify.m4                            |  7 +++++++
+ testcases/kernel/syscalls/fanotify/fanotify.h | 14 ++++++++------
+ 3 files changed, 16 insertions(+), 6 deletions(-)
+ create mode 100644 m4/ltp-fanotify.m4
+
+diff --git a/configure.ac b/configure.ac
+index 3785dff63..b762e83c2 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -213,6 +213,7 @@ LTP_CHECK_CAPABILITY_SUPPORT
+ LTP_CHECK_CC_WARN_OLDSTYLE
+ LTP_CHECK_CLONE_SUPPORTS_7_ARGS
+ LTP_CHECK_CRYPTO
++LTP_CHECK_FANOTIFY
+ LTP_CHECK_FIDEDUPE
+ LTP_CHECK_FORTIFY_SOURCE
+ LTP_CHECK_FTS_H
+diff --git a/m4/ltp-fanotify.m4 b/m4/ltp-fanotify.m4
+new file mode 100644
+index 000000000..e7b77d8a4
+--- /dev/null
++++ b/m4/ltp-fanotify.m4
+@@ -0,0 +1,7 @@
++dnl SPDX-License-Identifier: GPL-2.0-or-later
++dnl Copyright (c) 2019 Petr Vorel <petr.vorel@gmail.com>
++
++AC_DEFUN([LTP_CHECK_FANOTIFY],[
++AC_CHECK_TYPES([struct fanotify_event_info_header],,,[#include <sys/fanotify.h>])
++AC_CHECK_TYPES([struct fanotify_event_info_fid],,,[#include <sys/fanotify.h>])
++])
+diff --git a/testcases/kernel/syscalls/fanotify/fanotify.h b/testcases/kernel/syscalls/fanotify/fanotify.h
+index 573ed5f59..9d2fded13 100644
+--- a/testcases/kernel/syscalls/fanotify/fanotify.h
++++ b/testcases/kernel/syscalls/fanotify/fanotify.h
+@@ -101,6 +101,10 @@ static long fanotify_mark(int fd, unsigned int flags, uint64_t mask,
+ #define FAN_OPEN_EXEC_PERM	0x00040000
+ #endif
+
++#ifndef FAN_REPORT_FID
++#define FAN_REPORT_FID		0x00000200
++#endif
++
+ /*
+  * FAN_ALL_PERM_EVENTS has been deprecated, so any new permission events
+  * are not to be added to it. To cover the instance where a new permission
+@@ -123,23 +127,21 @@ typedef struct {
+ #define __kernel_fsid_t lapi_fsid_t
+ #endif /* __kernel_fsid_t */
+
+-#ifndef FAN_REPORT_FID
+-#define FAN_REPORT_FID		0x00000200
+-
++#ifndef HAVE_STRUCT_FANOTIFY_EVENT_INFO_HEADER
+ struct fanotify_event_info_header {
+	uint8_t info_type;
+	uint8_t pad;
+	uint16_t len;
+ };
++#endif /* HAVE_STRUCT_FANOTIFY_EVENT_INFO_HEADER */
+
+-#ifdef HAVE_NAME_TO_HANDLE_AT
++#ifndef HAVE_STRUCT_FANOTIFY_EVENT_INFO_FID
+ struct fanotify_event_info_fid {
+	struct fanotify_event_info_header hdr;
+	__kernel_fsid_t fsid;
+	unsigned char handle[0];
+ };
+-#endif /* HAVE_NAME_TO_HANDLE_AT */
+-#endif /* ! FAN_REPORT_FID */
++#endif /* HAVE_STRUCT_FANOTIFY_EVENT_INFO_FID */
+
+ #ifdef HAVE_NAME_TO_HANDLE_AT
+ /*
+--
+2.24.0
diff --git a/package/ltp-testsuite/0006-fanotify-Detect-val-vs.-__val-fanotify_event_info_fi.patch b/package/ltp-testsuite/0006-fanotify-Detect-val-vs.-__val-fanotify_event_info_fi.patch
new file mode 100644
index 0000000000..31e605a30a
--- /dev/null
+++ b/package/ltp-testsuite/0006-fanotify-Detect-val-vs.-__val-fanotify_event_info_fi.patch
@@ -0,0 +1,108 @@ 
+From 0498fc0a812e53040a9527f7343089b8b1aa70a7 Mon Sep 17 00:00:00 2001
+From: Petr Vorel <petr.vorel@gmail.com>
+Date: Wed, 13 Nov 2019 01:26:06 +0100
+Subject: [PATCH 3/3] fanotify: Detect val vs. __val
+ fanotify_event_info_fid.fsid member
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+via FSID_VAL_MEMBER() macro and autotools detection.
+
+This fixes build on musl, which also defines fanotify_event_info_fid,
+but uses fsid_t type for fsid instead of __kernel_fsid_t.
+fsid_t type has __val[2] member (unlike val[2] in __kernel_fsid_t).
+
+Fixed error:
+
+fanotify13.c: In function ‘do_test’:
+fanotify13.c:278:20: error: ‘fsid_t’ {aka ‘struct __fsid_t’} has no member named ‘val’; did you mean ‘__val’?
+    event_fid->fsid.val[0],
+		    ^~~
+../../../../include/tst_test.h:49:53: note: in definition of macro ‘tst_res’
+  tst_res_(__FILE__, __LINE__, (ttype), (arg_fmt), ##__VA_ARGS__)
+						     ^~~~~~~~~~~
+fanotify13.c:279:20: error: ‘fsid_t’ {aka ‘struct __fsid_t’} has no member named ‘val’; did you mean ‘__val’?
+    event_fid->fsid.val[1],
+
+Acked-by: Cyril Hrubis <chrubis@suse.cz>
+Acked-by: Jan Stancek <jstancek@redhat.com>
+Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
+[Upstream status: 0498fc0a812e53040a9527f7343089b8b1aa70a7]
+---
+ m4/ltp-fanotify.m4                              | 1 +
+ testcases/kernel/syscalls/fanotify/fanotify.h   | 6 ++++++
+ testcases/kernel/syscalls/fanotify/fanotify13.c | 8 ++++----
+ testcases/kernel/syscalls/fanotify/fanotify15.c | 4 ++--
+ 4 files changed, 13 insertions(+), 6 deletions(-)
+
+diff --git a/m4/ltp-fanotify.m4 b/m4/ltp-fanotify.m4
+index e7b77d8a4..f2e31eb68 100644
+--- a/m4/ltp-fanotify.m4
++++ b/m4/ltp-fanotify.m4
+@@ -4,4 +4,5 @@ dnl Copyright (c) 2019 Petr Vorel <petr.vorel@gmail.com>
+ AC_DEFUN([LTP_CHECK_FANOTIFY],[
+ AC_CHECK_TYPES([struct fanotify_event_info_header],,,[#include <sys/fanotify.h>])
+ AC_CHECK_TYPES([struct fanotify_event_info_fid],,,[#include <sys/fanotify.h>])
++AC_CHECK_MEMBERS([struct fanotify_event_info_fid.fsid.__val],,,[#include <sys/fanotify.h>])
+ ])
+diff --git a/testcases/kernel/syscalls/fanotify/fanotify.h b/testcases/kernel/syscalls/fanotify/fanotify.h
+index 9d2fded13..5370e30bb 100644
+--- a/testcases/kernel/syscalls/fanotify/fanotify.h
++++ b/testcases/kernel/syscalls/fanotify/fanotify.h
+@@ -143,6 +143,12 @@ struct fanotify_event_info_fid {
+ };
+ #endif /* HAVE_STRUCT_FANOTIFY_EVENT_INFO_FID */
+
++#ifdef HAVE_STRUCT_FANOTIFY_EVENT_INFO_FID_FSID___VAL
++# define FSID_VAL_MEMBER(fsid, i) (fsid.__val[i])
++#else
++# define FSID_VAL_MEMBER(fsid, i) (fsid.val[i])
++#endif /* HAVE_STRUCT_FANOTIFY_EVENT_INFO_FID_FSID___VAL */
++
+ #ifdef HAVE_NAME_TO_HANDLE_AT
+ /*
+  * Helper function used to obtain fsid and file_handle for a given path.
+diff --git a/testcases/kernel/syscalls/fanotify/fanotify13.c b/testcases/kernel/syscalls/fanotify/fanotify13.c
+index 030734285..b0d9fb5b6 100644
+--- a/testcases/kernel/syscalls/fanotify/fanotify13.c
++++ b/testcases/kernel/syscalls/fanotify/fanotify13.c
+@@ -130,8 +130,8 @@ static int setup_marks(unsigned int fd, struct test_case_t *tc)
+					"kernel");
+				return 1;
+			} else if (errno == ENODEV &&
+-					!event_set[i].fsid.val[0] &&
+-					!event_set[i].fsid.val[1]) {
++					!FSID_VAL_MEMBER(event_set[i].fsid, 0) &&
++					!FSID_VAL_MEMBER(event_set[i].fsid, 1)) {
+				tst_res(TCONF,
+					"FAN_REPORT_FID not supported on "
+					"filesystem type %s",
+@@ -275,8 +275,8 @@ static void do_test(unsigned int number)
+			"and name_to_handle_at(2)",
+			metadata->mask,
+			getpid(),
+-			event_fid->fsid.val[0],
+-			event_fid->fsid.val[1],
++			FSID_VAL_MEMBER(event_fid->fsid, 0),
++			FSID_VAL_MEMBER(event_fid->fsid, 1),
+			*(unsigned long *) event_file_handle->f_handle);
+	}
+ out:
+diff --git a/testcases/kernel/syscalls/fanotify/fanotify15.c b/testcases/kernel/syscalls/fanotify/fanotify15.c
+index e9e926078..48ed368ae 100644
+--- a/testcases/kernel/syscalls/fanotify/fanotify15.c
++++ b/testcases/kernel/syscalls/fanotify/fanotify15.c
+@@ -192,8 +192,8 @@ static void do_test(void)
+				"fid=%x.%x.%lx values",
+				metadata->mask,
+				getpid(),
+-				event_fid->fsid.val[0],
+-				event_fid->fsid.val[1],
++				FSID_VAL_MEMBER(event_fid->fsid, 0),
++				FSID_VAL_MEMBER(event_fid->fsid, 1),
+				*(unsigned long *)
+				event_file_handle->f_handle);
+		}
+--
+2.24.0
diff --git a/package/ltp-testsuite/0007-fanotify-Fix-for-musl.patch b/package/ltp-testsuite/0007-fanotify-Fix-for-musl.patch
new file mode 100644
index 0000000000..4dce7dec3a
--- /dev/null
+++ b/package/ltp-testsuite/0007-fanotify-Fix-for-musl.patch
@@ -0,0 +1,30 @@ 
+From 087e13ecb9eea6cbd920708e64eab18e7ab8a90c Mon Sep 17 00:00:00 2001
+From: Petr Vorel <petr.vorel@gmail.com>
+Date: Sat, 16 Nov 2019 00:14:42 +0100
+Subject: [PATCH] fanotify: Fix for musl
+
+Fixes: 0498fc0a8 ("fanotify: Detect val vs. __val fanotify_event_info_fid.fsid member")
+
+Signed-off-by: Petr Vorel <petr.vorel@gmail.com>
+---
+ testcases/kernel/syscalls/fanotify/fanotify13.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/testcases/kernel/syscalls/fanotify/fanotify13.c b/testcases/kernel/syscalls/fanotify/fanotify13.c
+index 26212ab62..3d8de6009 100644
+--- a/testcases/kernel/syscalls/fanotify/fanotify13.c
++++ b/testcases/kernel/syscalls/fanotify/fanotify13.c
+@@ -130,8 +130,8 @@ static int setup_marks(unsigned int fd, struct test_case_t *tc)
+ 					"kernel");
+ 				return 1;
+ 			} else if (errno == ENODEV &&
+-					!FSID_VAL_MEMBER(event_set[i].fsid, 0) &&
+-					!FSID_VAL_MEMBER(event_set[i].fsid, 1)) {
++					!event_set[i].fsid.val[0] &&
++					!event_set[i].fsid.val[1]) {
+ 				tst_res(TCONF,
+ 					"FAN_REPORT_FID not supported on "
+ 					"filesystem type %s",
+-- 
+2.24.0
+
diff --git a/package/ltp-testsuite/ltp-testsuite.mk b/package/ltp-testsuite/ltp-testsuite.mk
index 2ab2cd726e..ce02cc4e98 100644
--- a/package/ltp-testsuite/ltp-testsuite.mk
+++ b/package/ltp-testsuite/ltp-testsuite.mk
@@ -117,4 +117,8 @@  endef
 LTP_TESTSUITE_POST_PATCH_HOOKS += LTP_TESTSUITE_REMOVE_LDD
 endif
 
+# 0005-fanotify-Rework-checks-for-fallback-definitions.patch
+# 0006-fanotify-Detect-val-vs.-__val-fanotify_event_info_fi.patch
+LTP_TESTSUITE_AUTORECONF = YES
+
 $(eval $(autotools-package))