trace_btf_enum.sh 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #!/bin/sh
  2. # perf trace enum augmentation tests
  3. # SPDX-License-Identifier: GPL-2.0
  4. err=0
  5. set -e
  6. syscall="landlock_add_rule"
  7. non_syscall="timer:hrtimer_init,timer:hrtimer_start"
  8. TESTPROG="perf test -w landlock"
  9. # shellcheck source=lib/probe.sh
  10. . "$(dirname $0)"/lib/probe.sh
  11. skip_if_no_perf_trace || exit 2
  12. check_vmlinux() {
  13. echo "Checking if vmlinux exists"
  14. if ! ls /sys/kernel/btf/vmlinux 1>/dev/null 2>&1
  15. then
  16. echo "trace+enum test [Skipped missing vmlinux BTF support]"
  17. err=2
  18. fi
  19. }
  20. check_permissions() {
  21. if perf trace -e $syscall $TESTPROG 2>&1 | grep -q "Operation not permitted"
  22. then
  23. echo "trace+enum test [Skipped permissions]"
  24. err=2
  25. fi
  26. }
  27. trace_landlock() {
  28. echo "Tracing syscall ${syscall}"
  29. # test flight just to see if landlock_add_rule is available
  30. if ! perf trace $TESTPROG 2>&1 | grep -q landlock
  31. then
  32. echo "No landlock system call found, skipping to non-syscall tracing."
  33. return
  34. fi
  35. if perf trace -e $syscall $TESTPROG 2>&1 | \
  36. grep -q -E ".*landlock_add_rule\(ruleset_fd: 11, rule_type: (LANDLOCK_RULE_PATH_BENEATH|LANDLOCK_RULE_NET_PORT), rule_attr: 0x[a-f0-9]+, flags: 45\) = -1.*"
  37. then
  38. err=0
  39. else
  40. err=1
  41. fi
  42. }
  43. trace_non_syscall() {
  44. echo "Tracing non-syscall tracepoint ${non-syscall}"
  45. if perf trace -e $non_syscall --max-events=1 2>&1 | \
  46. grep -q -E '.*timer:hrtimer_.*\(.*mode: HRTIMER_MODE_.*\)$'
  47. then
  48. err=0
  49. else
  50. err=1
  51. fi
  52. }
  53. check_vmlinux
  54. if [ $err = 0 ]; then
  55. check_permissions
  56. fi
  57. if [ $err = 0 ]; then
  58. trace_landlock
  59. fi
  60. if [ $err = 0 ]; then
  61. trace_non_syscall
  62. fi
  63. exit $err