brintos

brintos / linux-shallow public Read only

0
0
Text · 2.3 KiB · 8f1292a Raw
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