public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
* [LTP] [PATCH] fix fanotify syscall (again)
@ 2014-07-10 16:13 Helge Deller
  2014-07-14 11:20 ` Jan Stancek
  2014-07-15  8:45 ` chrubis
  0 siblings, 2 replies; 5+ messages in thread
From: Helge Deller @ 2014-07-10 16:13 UTC (permalink / raw)
  To: ltp-list

This patch to some degree reverts my last patch which was committed as:
  commit 5d08e164964e19be693e6e8fddf3afb82e505b4f
  Author: Helge Deller <deller@gmx.de>
  Date:   Wed Apr 16 21:00:28 2014 +0200
  fix fanotify syscall check on compat kernel

The problem is, that fanotify_mark() uses a 64bit parameter (mask).
When calling this syscall with it's 64bit parameter on a 32bit arch it is very
architecture and compiler dependend, in which order the lower and higher 32bits
are put on the stack and thus ends up in the arguments for the Linux kernel.

So, to avoid any problems we really need to call this syscall the same way as
it's defined by glibc.

This patch will utilize the glibc header <sys/fanotify.h> if available and
only use a manual syscall as fallback.

Tested on the hppa/parisc 32- and 64bit architecture.

Signed-off-by: Helge Deller <deller@gmx.de>

diff --git a/testcases/kernel/syscalls/fanotify/fanotify.h b/testcases/kernel/syscalls/fanotify/fanotify.h
index a52093c..6625811 100644
--- a/testcases/kernel/syscalls/fanotify/fanotify.h
+++ b/testcases/kernel/syscalls/fanotify/fanotify.h
@@ -28,27 +28,43 @@
 #ifndef	__FANOTIFY_H__
 #define	__FANOTIFY_H__
 
+#include "config.h"
+
 #include <stdint.h>
-#include <endian.h>
-#include "lapi/abisize.h"
 #include "linux_syscall_numbers.h"
 
 /* fanotify(7) wrappers */
 
-#define	myfanotify_init(flags, event_f_flags) \
-	syscall(__NR_fanotify_init, flags, event_f_flags)
 
-long myfanotify_mark(int fd, unsigned int flags, uint64_t mask,
+#if defined(HAVE_SYS_FANOTIFY_H)
+
+#include <sys/fanotify.h>
+
+static int myfanotify_init(unsigned int flags, unsigned int event_f_flags)
+{
+	return fanotify_init(flags, event_f_flags);
+}
+
+static long myfanotify_mark(int fd, unsigned int flags, uint64_t mask,
                      int dfd, const char *pathname)
 {
-#if LTP_USE_64_ABI
-	return ltp_syscall(__NR_fanotify_mark, fd, flags, mask, dfd, pathname);
-#else
-	return ltp_syscall(__NR_fanotify_mark, fd, flags,
-			 __LONG_LONG_PAIR((unsigned long) (mask >> 32),
-					  (unsigned long) mask),
-			 dfd, (unsigned long) pathname);
-#endif
+	return fanotify_mark(fd, flags, mask, dfd, pathname);
+}
+
+#else /* HAVE_SYS_FANOTIFY_H */
+
+static int myfanotify_init(unsigned int flags, unsigned int event_f_flags)
+{
+	return syscall(__NR_fanotify_init, flags, event_f_flags);
 }
 
+static long myfanotify_mark(int fd, unsigned int flags, uint64_t mask,
+                     int dfd, const char *pathname)
+{
+	return syscall(__NR_fanotify_mark, fd, flags, mask, dfd, pathname);
+}
+
+#endif
+
+
 #endif /* __FANOTIFY_H__ */

------------------------------------------------------------------------------
Open source business process management suite built on Java and Eclipse
Turn processes into business applications with Bonita BPM Community Edition
Quickly connect people, data, and systems into organized workflows
Winner of BOSSIE, CODIE, OW2 and Gartner awards
http://p.sf.net/sfu/Bonitasoft
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2014-08-06 11:52 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-07-10 16:13 [LTP] [PATCH] fix fanotify syscall (again) Helge Deller
2014-07-14 11:20 ` Jan Stancek
2014-07-14 13:45   ` chrubis
2014-07-15  8:45 ` chrubis
     [not found]   ` <53D7C780.3080906@gmx.de>
2014-08-06 11:51     ` chrubis

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox