1#!/bin/sh 2# SPDX-License-Identifier: GPL-2.0 3# description: Kprobe event argument syntax 4 5[ -f kprobe_events ] || exit_unsupported # this is configurable 6 7grep "x8/16/32/64" README > /dev/null || exit_unsupported # version issue 8 9echo 0 > events/enable 10echo > kprobe_events 11 12PROBEFUNC="vfs_read" 13GOODREG= 14BADREG= 15GOODSYM="_sdata" 16if ! grep -qw ${GOODSYM} /proc/kallsyms ; then 17 GOODSYM=$PROBEFUNC 18fi 19BADSYM="deaqswdefr" 20SYMADDR=0x`grep -w ${GOODSYM} /proc/kallsyms | cut -f 1 -d " "` 21GOODTYPE="x16" 22BADTYPE="y16" 23 24case `uname -m` in 25x86_64|i[3456]86) 26 GOODREG=%ax 27 BADREG=%ex 28;; 29aarch64) 30 GOODREG=%x0 31 BADREG=%ax 32;; 33arm*) 34 GOODREG=%r0 35 BADREG=%ax 36;; 37esac 38 39test_goodarg() # Good-args 40{ 41 while [ "$1" ]; do 42 echo "p ${PROBEFUNC} $1" > kprobe_events 43 shift 1 44 done; 45} 46 47test_badarg() # Bad-args 48{ 49 while [ "$1" ]; do 50 ! echo "p ${PROBEFUNC} $1" > kprobe_events 51 shift 1 52 done; 53} 54 55echo > kprobe_events 56 57: "Register access" 58test_goodarg ${GOODREG} 59test_badarg ${BADREG} 60 61: "Symbol access" 62test_goodarg "@${GOODSYM}" "@${SYMADDR}" "@${GOODSYM}+10" "@${GOODSYM}-10" 63test_badarg "@" "@${BADSYM}" "@${GOODSYM}*10" "@${GOODSYM}/10" \ 64 "@${GOODSYM}%10" "@${GOODSYM}&10" "@${GOODSYM}|10" 65 66: "Stack access" 67test_goodarg "\$stack" "\$stack0" "\$stack1" 68test_badarg "\$stackp" "\$stack0+10" "\$stack1-10" 69 70: "Retval access" 71echo "r ${PROBEFUNC} \$retval" > kprobe_events 72! echo "p ${PROBEFUNC} \$retval" > kprobe_events 73 74: "Comm access" 75test_goodarg "\$comm" 76 77: "Indirect memory access" 78test_goodarg "+0(${GOODREG})" "-0(${GOODREG})" "+10(\$stack)" \ 79 "+0(\$stack1)" "+10(@${GOODSYM}-10)" "+0(+10(+20(\$stack)))" 80test_badarg "+(${GOODREG})" "(${GOODREG}+10)" "-(${GOODREG})" "(${GOODREG})" \ 81 "+10(\$comm)" "+0(${GOODREG})+10" 82 83: "Name assignment" 84test_goodarg "varname=${GOODREG}" 85test_badarg "varname=varname2=${GOODREG}" 86 87: "Type syntax" 88test_goodarg "${GOODREG}:${GOODTYPE}" 89test_badarg "${GOODREG}::${GOODTYPE}" "${GOODREG}:${BADTYPE}" \ 90 "${GOODTYPE}:${GOODREG}" 91 92: "Combination check" 93 94test_goodarg "\$comm:string" "+0(\$stack):string" 95test_badarg "\$comm:x64" "\$stack:string" "${GOODREG}:string" 96 97echo > kprobe_events 98