kprobe_args_syntax.tc 2.1 KB

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