X Tutup
Skip to content

Commit 373c23b

Browse files
cee1poettering
authored andcommitted
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.
1 parent 13f9123 commit 373c23b

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

src/missing.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,18 @@ static inline int fanotify_init(unsigned int flags, unsigned int event_f_flags)
125125

126126
static inline int fanotify_mark(int fanotify_fd, unsigned int flags, uint64_t mask,
127127
int dfd, const char *pathname) {
128+
#if defined _MIPS_SIM && _MIPS_SIM == _MIPS_SIM_ABI32
129+
union {
130+
uint64_t _64;
131+
uint32_t _32[2];
132+
} _mask;
133+
_mask._64 = mask;
134+
135+
return syscall(__NR_fanotify_mark, fanotify_fd, flags,
136+
_mask._32[0], _mask._32[1], dfd, pathname);
137+
#else
128138
return syscall(__NR_fanotify_mark, fanotify_fd, flags, mask, dfd, pathname);
139+
#endif
129140
}
130141

131142
#ifndef BTRFS_IOCTL_MAGIC

0 commit comments

Comments
 (0)
X Tutup