116 lines · plain
1#!/bin/sh2# SPDX-License-Identifier: GPL-2.03# description: Kprobe event argument syntax4# requires: kprobe_events "x8/16/32/64":README5 6PROBEFUNC="vfs_read"7GOODREG=8BADREG=9GOODSYM="_sdata"10if ! grep -qw ${GOODSYM} /proc/kallsyms ; then11 GOODSYM=$PROBEFUNC12fi13BADSYM="deaqswdefr"14SYMADDR=0x`grep -w ${GOODSYM} /proc/kallsyms | cut -f 1 -d " "`15GOODTYPE="x16"16BADTYPE="y16"17 18case `uname -m` in19x86_64|i[3456]86)20 GOODREG=%ax21 BADREG=%ex22;;23aarch64)24 GOODREG=%x025 BADREG=%ax26;;27arm*)28 GOODREG=%r029 BADREG=%ax30;;31ppc*)32 GOODREG=%r333 BADREG=%msr34;;35s390*)36 GOODREG=%r237 BADREG=%s238;;39mips*)40 GOODREG=%r441 BADREG=%r1242;;43loongarch*)44 GOODREG=%r445 BADREG=%r1246;;47riscv*)48 GOODREG=%a049 BADREG=%a850;;51*)52 echo "Please implement other architecture here"53 exit_untested54esac55 56test_goodarg() # Good-args57{58 while [ "$1" ]; do59 echo "p ${PROBEFUNC} $1" > kprobe_events60 shift 161 done;62}63 64test_badarg() # Bad-args65{66 while [ "$1" ]; do67 ! echo "p ${PROBEFUNC} $1" > kprobe_events68 shift 169 done;70}71 72echo > kprobe_events73 74: "Register access"75test_goodarg ${GOODREG}76test_badarg ${BADREG}77 78: "Symbol access"79test_goodarg "@${GOODSYM}" "@${SYMADDR}" "@${GOODSYM}+10" "@${GOODSYM}-10"80test_badarg "@" "@${BADSYM}" "@${GOODSYM}*10" "@${GOODSYM}/10" \81 "@${GOODSYM}%10" "@${GOODSYM}&10" "@${GOODSYM}|10"82 83: "Stack access"84test_goodarg "\$stack" "\$stack0" "\$stack1"85test_badarg "\$stackp" "\$stack0+10" "\$stack1-10"86 87: "Retval access"88echo "r ${PROBEFUNC} \$retval" > kprobe_events89! echo "p ${PROBEFUNC} \$retval" > kprobe_events90 91# $comm was introduced in 4.8, older kernels reject it.92if grep -A1 "fetcharg:" README | grep -q '\$comm' ; then93: "Comm access"94test_goodarg "\$comm"95fi96 97: "Indirect memory access"98test_goodarg "+0(${GOODREG})" "-0(${GOODREG})" "+10(\$stack)" \99 "+0(\$stack1)" "+10(@${GOODSYM}-10)" "+0(+10(+20(\$stack)))"100test_badarg "+(${GOODREG})" "(${GOODREG}+10)" "-(${GOODREG})" "(${GOODREG})" \101 "+10(\$comm)" "+0(${GOODREG})+10"102 103: "Name assignment"104test_goodarg "varname=${GOODREG}"105test_badarg "varname=varname2=${GOODREG}"106 107: "Type syntax"108test_goodarg "${GOODREG}:${GOODTYPE}"109test_badarg "${GOODREG}::${GOODTYPE}" "${GOODREG}:${BADTYPE}" \110 "${GOODTYPE}:${GOODREG}"111 112: "Combination check"113 114test_goodarg "\$comm:string" "+0(\$stack):string"115test_badarg "\$comm:x64" "\$stack:string" "${GOODREG}:string"116