lkml.org 
[lkml]   [2018]   [Mar]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 02/19] selftests: ftrace: Add probe event argument syntax testcase
    Date
    Add a testcase for probe event argument syntax which
    ensures the kprobe_events interface correctly parses
    given event arguments.

    Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
    ---
    .../ftrace/test.d/kprobe/kprobe_args_syntax.tc | 97 ++++++++++++++++++++
    1 file changed, 97 insertions(+)
    create mode 100644 tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_syntax.tc

    diff --git a/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_syntax.tc b/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_syntax.tc
    new file mode 100644
    index 000000000000..231bcd2c4eb5
    --- /dev/null
    +++ b/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_syntax.tc
    @@ -0,0 +1,97 @@
    +#!/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
    \
     
     \ /
      Last update: 2018-03-08 09:46    [W:3.659 / U:0.136 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site