Re: [LTP] [PATCH] fix fanotify syscall check on compat kernel

chrubis
2014-04-17T09:34:17Z

Hi!
> #ifndef __FANOTIFY_H__
> #define __FANOTIFY_H__
>
> +#include <sys/types.h>
> +#include <endian.h>
> +#include "config.h"
> +#include "linux_syscall_numbers.h"
> +
> /* fanotify(7) wrappers */
>
> #define myfanotify_init(flags, event_f_flags) \
> syscall(__NR_fanotify_init, flags, event_f_flags)
>
> -#define myfanotify_mark(fd, flags, mask, dfd, pathname) \
> - syscall(__NR_fanotify_mark, fd, flags, mask, dfd, pathname)
> +long myfanotify_mark(int fd, unsigned int flags, unsigned long long mask, int dfd, const char *pathname)
> +{
> +#if __WORDSIZE == 64
> + 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
> +}

I think that the x32 ABI should be handled here as well (as in the
fallocate.h). Mike can you confirm?

Also I've been unable to make the testcases work with -m32 on x86_64
both with and without the patch and even when using glibc wrappers from
sys/fallocate.h, in all cases the error is EINVAL which suggets that the
parameters are passed wrongly somewhere on the way.