[systemd-commits] src/missing.h

Lennart Poettering lennart at kemper.freedesktop.org
Wed Apr 20 19:21:30 PDT 2011


 src/missing.h |   11 +++++++++++
 1 file changed, 11 insertions(+)

New commits:
commit 373c23b27f2d886fc023cf5d02fe3bb3eba2e8e9
Author: cee1 <fykcee1 at gmail.com>
Date:   Wed Apr 20 17:59:18 2011 +0800

    missing: Fix broken syscall(__NR_fanotify_mark... on o32 mips.
    
    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=%23618562
    MIPS o32 ABI enforces that 64bit arguments should be 64bit-aligned, and
    the third argument of syscall(__NR_fanotify_mark, ...) is 64bit and not
    64bit-aligned on o32 mips platform, thus extra padding is inserted
    before it. The syscall function doesn't know the prototype of
    fanotify_mark, so the padding will be passed into kernel as valid
    argument.

diff --git a/src/missing.h b/src/missing.h
index 35e209f..f1dbb39 100644
--- a/src/missing.h
+++ b/src/missing.h
@@ -125,7 +125,18 @@ static inline int fanotify_init(unsigned int flags, unsigned int event_f_flags)
 
 static inline int fanotify_mark(int fanotify_fd, unsigned int flags, uint64_t mask,
                                 int dfd, const char *pathname) {
+#if defined _MIPS_SIM && _MIPS_SIM == _MIPS_SIM_ABI32
+        union {
+                uint64_t _64;
+                uint32_t _32[2];
+        } _mask;
+        _mask._64 = mask;
+
+        return syscall(__NR_fanotify_mark, fanotify_fd, flags,
+                       _mask._32[0], _mask._32[1], dfd, pathname);
+#else
         return syscall(__NR_fanotify_mark, fanotify_fd, flags, mask, dfd, pathname);
+#endif
 }
 
 #ifndef BTRFS_IOCTL_MAGIC



More information about the systemd-commits mailing list