file: fanotify_usr.c: syscall function fanotify_mark,below code will overflow on 32-bit system. /* we only use the lower 32 bits as of right now. */ if ( mask & ((__u64)0xffffffff << 32)) return -EINVAL; include/linux/syscalls.h: asmlinkage long sys_fanotify_mark(int fanotify_fd, unsigned int flags, u64 mask, int fd, const char __usr *pathname); u64 mask ,should convert to unsigned int mask???
A __u64 value is an unsigned long long, a 64-bit integer, regardless of system bitness. Not sure how/why this would overflow on a 32-bit system. What symptoms are you seeing? We're using fanotify_mark() on 32-bit systems without seeing any issue here.
Not an ext4 issue, I'd suggest that this be reclassified as "Other" and assigned to "fs_other@kernel-bugs.osdl.org" or Eric Paris (eparis@redhat.com)
Tinkering with Eric Paris's fanotify-example (http://git.infradead.org/users/eparis/fanotify-example.git), to forcibly set higher bits in the mask passed to fanotify_mark(), the call correctly returns -EINVAL on both 32- and 64-bit kernels. Suggest this bug should be rejected unless a failing example can be provided.