12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- #!/bin/sh
- # SPDX-License-Identifier: GPL-2.0
- # description: Kprobe event argument syntax
- [ -f kprobe_events ] || exit_unsupported # this is configurable
- grep "x8/16/32/64" README > /dev/null || exit_unsupported # version issue
- echo 0 > events/enable
- echo > kprobe_events
- PROBEFUNC="vfs_read"
- GOODREG=
- BADREG=
- GOODSYM="_sdata"
- if ! grep -qw ${GOODSYM} /proc/kallsyms ; then
- GOODSYM=$PROBEFUNC
- fi
- BADSYM="deaqswdefr"
- SYMADDR=0x`grep -w ${GOODSYM} /proc/kallsyms | cut -f 1 -d " "`
- GOODTYPE="x16"
- BADTYPE="y16"
- case `uname -m` in
- x86_64|i[3456]86)
- GOODREG=%ax
- BADREG=%ex
- ;;
- aarch64)
- GOODREG=%x0
- BADREG=%ax
- ;;
- arm*)
- GOODREG=%r0
- BADREG=%ax
- ;;
- esac
- test_goodarg() # Good-args
- {
- while [ "$1" ]; do
- echo "p ${PROBEFUNC} $1" > kprobe_events
- shift 1
- done;
- }
- test_badarg() # Bad-args
- {
- while [ "$1" ]; do
- ! echo "p ${PROBEFUNC} $1" > kprobe_events
- shift 1
- done;
- }
- echo > kprobe_events
- : "Register access"
- test_goodarg ${GOODREG}
- test_badarg ${BADREG}
- : "Symbol access"
- test_goodarg "@${GOODSYM}" "@${SYMADDR}" "@${GOODSYM}+10" "@${GOODSYM}-10"
- test_badarg "@" "@${BADSYM}" "@${GOODSYM}*10" "@${GOODSYM}/10" \
- "@${GOODSYM}%10" "@${GOODSYM}&10" "@${GOODSYM}|10"
- : "Stack access"
- test_goodarg "\$stack" "\$stack0" "\$stack1"
- test_badarg "\$stackp" "\$stack0+10" "\$stack1-10"
- : "Retval access"
- echo "r ${PROBEFUNC} \$retval" > kprobe_events
- ! echo "p ${PROBEFUNC} \$retval" > kprobe_events
- : "Comm access"
- test_goodarg "\$comm"
- : "Indirect memory access"
- test_goodarg "+0(${GOODREG})" "-0(${GOODREG})" "+10(\$stack)" \
- "+0(\$stack1)" "+10(@${GOODSYM}-10)" "+0(+10(+20(\$stack)))"
- test_badarg "+(${GOODREG})" "(${GOODREG}+10)" "-(${GOODREG})" "(${GOODREG})" \
- "+10(\$comm)" "+0(${GOODREG})+10"
- : "Name assignment"
- test_goodarg "varname=${GOODREG}"
- test_badarg "varname=varname2=${GOODREG}"
- : "Type syntax"
- test_goodarg "${GOODREG}:${GOODTYPE}"
- test_badarg "${GOODREG}::${GOODTYPE}" "${GOODREG}:${BADTYPE}" \
- "${GOODTYPE}:${GOODREG}"
- : "Combination check"
- test_goodarg "\$comm:string" "+0(\$stack):string"
- test_badarg "\$comm:x64" "\$stack:string" "${GOODREG}:string"
- echo > kprobe_events
|