0001
0002
0003
0004
0005
0006 PROBEFUNC="vfs_read"
0007 GOODREG=
0008 BADREG=
0009 GOODSYM="_sdata"
0010 if ! grep -qw ${GOODSYM} /proc/kallsyms ; then
0011 GOODSYM=$PROBEFUNC
0012 fi
0013 BADSYM="deaqswdefr"
0014 SYMADDR=0x`grep -w ${GOODSYM} /proc/kallsyms | cut -f 1 -d " "`
0015 GOODTYPE="x16"
0016 BADTYPE="y16"
0017
0018 case `uname -m` in
0019 x86_64|i[3456]86)
0020 GOODREG=%ax
0021 BADREG=%ex
0022 ;;
0023 aarch64)
0024 GOODREG=%x0
0025 BADREG=%ax
0026 ;;
0027 arm*)
0028 GOODREG=%r0
0029 BADREG=%ax
0030 ;;
0031 ppc*)
0032 GOODREG=%r3
0033 BADREG=%msr
0034 ;;
0035 s390*)
0036 GOODREG=%r2
0037 BADREG=%s2
0038 ;;
0039 mips*)
0040 GOODREG=%r4
0041 BADREG=%r12
0042 ;;
0043 *)
0044 echo "Please implement other architecture here"
0045 exit_untested
0046 esac
0047
0048 test_goodarg()
0049 {
0050 while [ "$1" ]; do
0051 echo "p ${PROBEFUNC} $1" > kprobe_events
0052 shift 1
0053 done;
0054 }
0055
0056 test_badarg()
0057 {
0058 while [ "$1" ]; do
0059 ! echo "p ${PROBEFUNC} $1" > kprobe_events
0060 shift 1
0061 done;
0062 }
0063
0064 echo > kprobe_events
0065
0066 : "Register access"
0067 test_goodarg ${GOODREG}
0068 test_badarg ${BADREG}
0069
0070 : "Symbol access"
0071 test_goodarg "@${GOODSYM}" "@${SYMADDR}" "@${GOODSYM}+10" "@${GOODSYM}-10"
0072 test_badarg "@" "@${BADSYM}" "@${GOODSYM}*10" "@${GOODSYM}/10" \
0073 "@${GOODSYM}%10" "@${GOODSYM}&10" "@${GOODSYM}|10"
0074
0075 : "Stack access"
0076 test_goodarg "\$stack" "\$stack0" "\$stack1"
0077 test_badarg "\$stackp" "\$stack0+10" "\$stack1-10"
0078
0079 : "Retval access"
0080 echo "r ${PROBEFUNC} \$retval" > kprobe_events
0081 ! echo "p ${PROBEFUNC} \$retval" > kprobe_events
0082
0083
0084 if grep -A1 "fetcharg:" README | grep -q '\$comm' ; then
0085 : "Comm access"
0086 test_goodarg "\$comm"
0087 fi
0088
0089 : "Indirect memory access"
0090 test_goodarg "+0(${GOODREG})" "-0(${GOODREG})" "+10(\$stack)" \
0091 "+0(\$stack1)" "+10(@${GOODSYM}-10)" "+0(+10(+20(\$stack)))"
0092 test_badarg "+(${GOODREG})" "(${GOODREG}+10)" "-(${GOODREG})" "(${GOODREG})" \
0093 "+10(\$comm)" "+0(${GOODREG})+10"
0094
0095 : "Name assignment"
0096 test_goodarg "varname=${GOODREG}"
0097 test_badarg "varname=varname2=${GOODREG}"
0098
0099 : "Type syntax"
0100 test_goodarg "${GOODREG}:${GOODTYPE}"
0101 test_badarg "${GOODREG}::${GOODTYPE}" "${GOODREG}:${BADTYPE}" \
0102 "${GOODTYPE}:${GOODREG}"
0103
0104 : "Combination check"
0105
0106 test_goodarg "\$comm:string" "+0(\$stack):string"
0107 test_badarg "\$comm:x64" "\$stack:string" "${GOODREG}:string"