Dmitry V. Levin
1ea64735fc
The fanotify_mark syscall takes a 64-bit mask, and on 32-bit architectures it is split up into two syscall arguments. * configure.ac (AC_CHECK_FUNCS): Add fanotify_mark. (AC_CHECK_HEADERS): Add sys/fanotify.h. * defs.h (getllval): New prototype. * util.c (getllval): New function based on printllval. (printllval): Use getllval. * fanotify.c (sys_fanotify_mark): Use getllval to properly decode 64-bit mask and two syscall arguments followed by it. * tests/fanotify_mark.c: New file. * tests/fanotify_mark.test: New test. * tests/Makefile.am (check_PROGRAMS): Add fanotify_mark. (TESTS): Add fanotify_mark.test. * tests/.gitignore: Add fanotify_mark.
59 lines
1.1 KiB
C
59 lines
1.1 KiB
C
#include "defs.h"
|
|
#include <linux/fanotify.h>
|
|
|
|
#include "xlat/fan_classes.h"
|
|
#include "xlat/fan_init_flags.h"
|
|
|
|
int
|
|
sys_fanotify_init(struct tcb *tcp)
|
|
{
|
|
unsigned flags;
|
|
|
|
if (exiting(tcp))
|
|
return 0;
|
|
|
|
flags = tcp->u_arg[0];
|
|
printxval(fan_classes, flags & FAN_ALL_CLASS_BITS, "FAN_CLASS_???");
|
|
flags &= ~FAN_ALL_CLASS_BITS;
|
|
if (flags) {
|
|
tprints("|");
|
|
printflags(fan_init_flags, flags, "FAN_???");
|
|
}
|
|
tprints(", ");
|
|
tprint_open_modes((unsigned) tcp->u_arg[1]);
|
|
|
|
return 0;
|
|
}
|
|
|
|
#include "xlat/fan_mark_flags.h"
|
|
#include "xlat/fan_event_flags.h"
|
|
|
|
int
|
|
sys_fanotify_mark(struct tcb *tcp)
|
|
{
|
|
unsigned long long mask = 0;
|
|
int argn;
|
|
|
|
if (exiting(tcp))
|
|
return 0;
|
|
|
|
printfd(tcp, tcp->u_arg[0]);
|
|
tprints(", ");
|
|
printflags(fan_mark_flags, (unsigned) tcp->u_arg[1], "FAN_MARK_???");
|
|
tprints(", ");
|
|
/*
|
|
* the mask argument is defined as 64-bit,
|
|
* but kernel uses the lower 32 bits only.
|
|
*/
|
|
argn = getllval(tcp, &mask, 2);
|
|
printflags(fan_event_flags, mask, "FAN_???");
|
|
tprints(", ");
|
|
if ((int) tcp->u_arg[argn] == FAN_NOFD)
|
|
tprints("FAN_NOFD, ");
|
|
else
|
|
print_dirfd(tcp, tcp->u_arg[argn]);
|
|
printpath(tcp, tcp->u_arg[argn + 1]);
|
|
|
|
return 0;
|
|
}
|