selftests/ftrace: Choose target function for filter test from samples
Since the event-filter-function.tc expects the 'exit_mmap()' directly
calls 'kmem_cache_free()', this is vulnerable to code modifications.
Choose the target function for the filter test from the sample
event data so that it can keep test running correctly even if the caller
function name will be changed.
Link: https://lore.kernel.org/linux-trace-kernel/167919441260.1922645.18355804179347364057.stgit@mhiramat.roam.corp.google.com/
Link: https://lore.kernel.org/all/CA+G9fYtF-XEKi9YNGgR=Kf==7iRb2FrmEC7qtwAeQbfyah-UhA@mail.gmail.com/
Reported-by: Linux Kernel Functional Testing <lkft@linaro.org>
Fixes: 7f09d639b8
("tracing/selftests: Add test for event filtering on function name")
Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org>
This commit is contained in:
Родитель
81d0fa4cb4
Коммит
eb50d0f250
|
@ -9,18 +9,33 @@ fail() { #msg
|
|||
exit_fail
|
||||
}
|
||||
|
||||
echo "Test event filter function name"
|
||||
sample_events() {
|
||||
echo > trace
|
||||
echo 1 > events/kmem/kmem_cache_free/enable
|
||||
echo 1 > tracing_on
|
||||
ls > /dev/null
|
||||
echo 0 > tracing_on
|
||||
echo 0 > events/kmem/kmem_cache_free/enable
|
||||
}
|
||||
|
||||
echo 0 > tracing_on
|
||||
echo 0 > events/enable
|
||||
echo > trace
|
||||
echo 'call_site.function == exit_mmap' > events/kmem/kmem_cache_free/filter
|
||||
echo 1 > events/kmem/kmem_cache_free/enable
|
||||
echo 1 > tracing_on
|
||||
ls > /dev/null
|
||||
echo 0 > events/kmem/kmem_cache_free/enable
|
||||
|
||||
hitcnt=`grep kmem_cache_free trace| grep exit_mmap | wc -l`
|
||||
misscnt=`grep kmem_cache_free trace| grep -v exit_mmap | wc -l`
|
||||
echo "Get the most frequently calling function"
|
||||
sample_events
|
||||
|
||||
target_func=`cut -d: -f3 trace | sed 's/call_site=\([^+]*\)+0x.*/\1/' | sort | uniq -c | sort | tail -n 1 | sed 's/^[ 0-9]*//'`
|
||||
if [ -z "$target_func" ]; then
|
||||
exit_fail
|
||||
fi
|
||||
echo > trace
|
||||
|
||||
echo "Test event filter function name"
|
||||
echo "call_site.function == $target_func" > events/kmem/kmem_cache_free/filter
|
||||
sample_events
|
||||
|
||||
hitcnt=`grep kmem_cache_free trace| grep $target_func | wc -l`
|
||||
misscnt=`grep kmem_cache_free trace| grep -v $target_func | wc -l`
|
||||
|
||||
if [ $hitcnt -eq 0 ]; then
|
||||
exit_fail
|
||||
|
@ -30,20 +45,14 @@ if [ $misscnt -gt 0 ]; then
|
|||
exit_fail
|
||||
fi
|
||||
|
||||
address=`grep ' exit_mmap$' /proc/kallsyms | cut -d' ' -f1`
|
||||
address=`grep " ${target_func}\$" /proc/kallsyms | cut -d' ' -f1`
|
||||
|
||||
echo "Test event filter function address"
|
||||
echo 0 > tracing_on
|
||||
echo 0 > events/enable
|
||||
echo > trace
|
||||
echo "call_site.function == 0x$address" > events/kmem/kmem_cache_free/filter
|
||||
echo 1 > events/kmem/kmem_cache_free/enable
|
||||
echo 1 > tracing_on
|
||||
sleep 1
|
||||
echo 0 > events/kmem/kmem_cache_free/enable
|
||||
sample_events
|
||||
|
||||
hitcnt=`grep kmem_cache_free trace| grep exit_mmap | wc -l`
|
||||
misscnt=`grep kmem_cache_free trace| grep -v exit_mmap | wc -l`
|
||||
hitcnt=`grep kmem_cache_free trace| grep $target_func | wc -l`
|
||||
misscnt=`grep kmem_cache_free trace| grep -v $target_func | wc -l`
|
||||
|
||||
if [ $hitcnt -eq 0 ]; then
|
||||
exit_fail
|
||||
|
|
Загрузка…
Ссылка в новой задаче