2025-03-27 21:19:54 +09:00
|
|
|
#!/bin/sh
|
|
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
# description: Checking dynamic events limitations
|
|
|
|
# requires: dynamic_events "imm-value":README
|
|
|
|
|
|
|
|
# Max arguments limitation
|
|
|
|
MAX_ARGS=128
|
|
|
|
EXCEED_ARGS=$((MAX_ARGS + 1))
|
|
|
|
|
2025-04-14 21:09:00 -04:00
|
|
|
# bash and dash evaluate variables differently.
|
|
|
|
# dash will evaluate '\\' every time it is read whereas bash does not.
|
|
|
|
#
|
|
|
|
# TEST_STRING="$TEST_STRING \\$i"
|
|
|
|
# echo $TEST_STRING
|
|
|
|
#
|
|
|
|
# With i=123
|
|
|
|
# On bash, that will print "\123"
|
|
|
|
# but on dash, that will print the escape sequence of \123 as the \ will
|
|
|
|
# be interpreted again in the echo.
|
|
|
|
#
|
|
|
|
# Set a variable "bs" to save a double backslash, then echo that
|
|
|
|
# to "ts" to see if $ts changed or not. If it changed, it's dash,
|
|
|
|
# if not, it's bash, and then bs can equal a single backslash.
|
|
|
|
bs='\\'
|
|
|
|
ts=`echo $bs`
|
|
|
|
if [ "$ts" = '\\' ]; then
|
|
|
|
# this is bash
|
|
|
|
bs='\'
|
|
|
|
fi
|
|
|
|
|
2025-03-27 21:19:54 +09:00
|
|
|
check_max_args() { # event_header
|
|
|
|
TEST_STRING=$1
|
|
|
|
# Acceptable
|
|
|
|
for i in `seq 1 $MAX_ARGS`; do
|
2025-04-14 21:09:00 -04:00
|
|
|
TEST_STRING="$TEST_STRING $bs$i"
|
2025-03-27 21:19:54 +09:00
|
|
|
done
|
|
|
|
echo "$TEST_STRING" >> dynamic_events
|
|
|
|
echo > dynamic_events
|
|
|
|
# Error
|
|
|
|
TEST_STRING="$TEST_STRING \\$EXCEED_ARGS"
|
|
|
|
! echo "$TEST_STRING" >> dynamic_events
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
# Kprobe max args limitation
|
|
|
|
if grep -q "kprobe_events" README; then
|
|
|
|
check_max_args "p vfs_read"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Fprobe max args limitation
|
|
|
|
if grep -q "f[:[<group>/][<event>]] <func-name>[%return] [<args>]" README; then
|
|
|
|
check_max_args "f vfs_read"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Tprobe max args limitation
|
|
|
|
if grep -q "t[:[<group>/][<event>]] <tracepoint> [<args>]" README; then
|
|
|
|
check_max_args "t kfree"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Uprobe max args limitation
|
|
|
|
if grep -q "uprobe_events" README; then
|
|
|
|
check_max_args "p /bin/sh:10"
|
|
|
|
fi
|