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.
36 lines
624 B
Bash
Executable File
36 lines
624 B
Bash
Executable File
#!/bin/sh
|
|
|
|
# Check fanotify_mark syscall decoding.
|
|
|
|
. "${srcdir=.}/init.sh"
|
|
|
|
check_prog grep
|
|
|
|
./fanotify_mark || {
|
|
if [ $? -eq 77 ]; then
|
|
framework_skip_ 'fanotify_mark is not available'
|
|
else
|
|
fail_ 'fanotify_mark failed'
|
|
fi
|
|
}
|
|
|
|
args="-efanotify_mark ./fanotify_mark"
|
|
$STRACE -o "$LOG" $args || {
|
|
cat "$LOG"
|
|
fail_ "$STRACE $args failed"
|
|
}
|
|
|
|
grep_log()
|
|
{
|
|
local syscall="$1"; shift
|
|
|
|
LC_ALL=C grep -E -x "$syscall$*" $LOG > /dev/null || {
|
|
cat $LOG
|
|
fail_ "$STRACE $args failed to trace \"$syscall\" properly"
|
|
}
|
|
}
|
|
|
|
grep_log fanotify_mark '\(-1, FAN_MARK_ADD, FAN_MODIFY\|FAN_ONDIR, AT_FDCWD, "\."\) += -1.*'
|
|
|
|
exit 0
|