mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 22:30:52 +07:00
While testing my development branch, without the fix for the pid use
after free bug, the selftest that Namhyung added triggers it. I figured it would be good to add the test for the bug after the fix, such that it does not exist without the fix. I added another patch that lets the test only test part of the pid filtering, and ignores the function-fork (filtering on children as well) if the function-fork feature does not exist. This feature is added by Namhyung just before he added this test. But since the test tests both with and without the feature, it would be good to let it not fail if the feature does not exist. -----BEGIN PGP SIGNATURE----- iQExBAABCAAbBQJY9kVEFBxyb3N0ZWR0QGdvb2RtaXMub3JnAAoJEMm5BfJq2Y3L nZQIAMJN51sNAnJHodKieAx6NUdnFbih7XknFZePGsGX2CHaRpPJuYRTEMIJrtds FSGCKOWjmmZ57xB/WYsCdH2H4cqd2TCFIeCT+6Pglk4+L2Y97idg5tzJ0+QGnDqT zBMd1kcmLathH5OoNsUEO5FR0QplBTb+3kVRu9XaAUgJhIlLwbF58BdtOv0l0avb saV/cVLosUjb4TXxwPgRZnmH9YElQ7RElf0S60JKbFTHCzyvoG0U17seFAklZOQl Ux0nn+LFWM+M7e7LYR3nSXnOzofDMz9r1bGGo9bgkng0Csl2Op1MFttofcsi3PvT FUxUGPZSEjxj3XrxXrkzzK8pRuI= =NEh1 -----END PGP SIGNATURE----- Merge tag 'trace-v4.11-rc5-4' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace Pull ftrace testcase update from Steven Rostedt: "While testing my development branch, without the fix for the pid use after free bug, the selftest that Namhyung added triggers it. I figured it would be good to add the test for the bug after the fix, such that it does not exist without the fix. I added another patch that lets the test only test part of the pid filtering, and ignores the function-fork (filtering on children as well) if the function-fork feature does not exist. This feature is added by Namhyung just before he added this test. But since the test tests both with and without the feature, it would be good to let it not fail if the feature does not exist" * tag 'trace-v4.11-rc5-4' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: selftests: ftrace: Add check for function-fork before running pid filter test selftests: ftrace: Add a testcase for function PID filter
This commit is contained in:
commit
fb5e2154b7
117
tools/testing/selftests/ftrace/test.d/ftrace/func-filter-pid.tc
Normal file
117
tools/testing/selftests/ftrace/test.d/ftrace/func-filter-pid.tc
Normal file
@ -0,0 +1,117 @@
|
||||
#!/bin/sh
|
||||
# description: ftrace - function pid filters
|
||||
|
||||
# Make sure that function pid matching filter works.
|
||||
# Also test it on an instance directory
|
||||
|
||||
if ! grep -q function available_tracers; then
|
||||
echo "no function tracer configured"
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
if [ ! -f set_ftrace_pid ]; then
|
||||
echo "set_ftrace_pid not found? Is function tracer not set?"
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
if [ ! -f set_ftrace_filter ]; then
|
||||
echo "set_ftrace_filter not found? Is function tracer not set?"
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
do_function_fork=1
|
||||
|
||||
if [ ! -f options/function-fork ]; then
|
||||
do_function_fork=0
|
||||
echo "no option for function-fork found. Option will not be tested."
|
||||
fi
|
||||
|
||||
read PID _ < /proc/self/stat
|
||||
|
||||
if [ $do_function_fork -eq 1 ]; then
|
||||
# default value of function-fork option
|
||||
orig_value=`grep function-fork trace_options`
|
||||
fi
|
||||
|
||||
do_reset() {
|
||||
reset_tracer
|
||||
clear_trace
|
||||
enable_tracing
|
||||
echo > set_ftrace_filter
|
||||
echo > set_ftrace_pid
|
||||
|
||||
if [ $do_function_fork -eq 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
echo $orig_value > trace_options
|
||||
}
|
||||
|
||||
fail() { # msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit $FAIL
|
||||
}
|
||||
|
||||
yield() {
|
||||
ping localhost -c 1 || sleep .001 || usleep 1 || sleep 1
|
||||
}
|
||||
|
||||
do_test() {
|
||||
disable_tracing
|
||||
|
||||
echo do_execve* > set_ftrace_filter
|
||||
echo *do_fork >> set_ftrace_filter
|
||||
|
||||
echo $PID > set_ftrace_pid
|
||||
echo function > current_tracer
|
||||
|
||||
if [ $do_function_fork -eq 1 ]; then
|
||||
# don't allow children to be traced
|
||||
echo nofunction-fork > trace_options
|
||||
fi
|
||||
|
||||
enable_tracing
|
||||
yield
|
||||
|
||||
count_pid=`cat trace | grep -v ^# | grep $PID | wc -l`
|
||||
count_other=`cat trace | grep -v ^# | grep -v $PID | wc -l`
|
||||
|
||||
# count_other should be 0
|
||||
if [ $count_pid -eq 0 -o $count_other -ne 0 ]; then
|
||||
fail "PID filtering not working?"
|
||||
fi
|
||||
|
||||
disable_tracing
|
||||
clear_trace
|
||||
|
||||
if [ $do_function_fork -eq 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
# allow children to be traced
|
||||
echo function-fork > trace_options
|
||||
|
||||
enable_tracing
|
||||
yield
|
||||
|
||||
count_pid=`cat trace | grep -v ^# | grep $PID | wc -l`
|
||||
count_other=`cat trace | grep -v ^# | grep -v $PID | wc -l`
|
||||
|
||||
# count_other should NOT be 0
|
||||
if [ $count_pid -eq 0 -o $count_other -eq 0 ]; then
|
||||
fail "PID filtering not following fork?"
|
||||
fi
|
||||
}
|
||||
|
||||
do_test
|
||||
|
||||
mkdir instances/foo
|
||||
cd instances/foo
|
||||
do_test
|
||||
cd ../../
|
||||
rmdir instances/foo
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
Loading…
Reference in New Issue
Block a user