Skip to content

Commit eb50d0f

Browse files
committed
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 <[email protected]> Fixes: 7f09d63 ("tracing/selftests: Add test for event filtering on function name") Signed-off-by: Masami Hiramatsu (Google) <[email protected]> Acked-by: Steven Rostedt (Google) <[email protected]>
1 parent 81d0fa4 commit eb50d0f

File tree

1 file changed

+27
-18
lines changed

1 file changed

+27
-18
lines changed

tools/testing/selftests/ftrace/test.d/filter/event-filter-function.tc

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,33 @@ fail() { #msg
99
exit_fail
1010
}
1111

12-
echo "Test event filter function name"
12+
sample_events() {
13+
echo > trace
14+
echo 1 > events/kmem/kmem_cache_free/enable
15+
echo 1 > tracing_on
16+
ls > /dev/null
17+
echo 0 > tracing_on
18+
echo 0 > events/kmem/kmem_cache_free/enable
19+
}
20+
1321
echo 0 > tracing_on
1422
echo 0 > events/enable
23+
24+
echo "Get the most frequently calling function"
25+
sample_events
26+
27+
target_func=`cut -d: -f3 trace | sed 's/call_site=\([^+]*\)+0x.*/\1/' | sort | uniq -c | sort | tail -n 1 | sed 's/^[ 0-9]*//'`
28+
if [ -z "$target_func" ]; then
29+
exit_fail
30+
fi
1531
echo > trace
16-
echo 'call_site.function == exit_mmap' > events/kmem/kmem_cache_free/filter
17-
echo 1 > events/kmem/kmem_cache_free/enable
18-
echo 1 > tracing_on
19-
ls > /dev/null
20-
echo 0 > events/kmem/kmem_cache_free/enable
2132

22-
hitcnt=`grep kmem_cache_free trace| grep exit_mmap | wc -l`
23-
misscnt=`grep kmem_cache_free trace| grep -v exit_mmap | wc -l`
33+
echo "Test event filter function name"
34+
echo "call_site.function == $target_func" > events/kmem/kmem_cache_free/filter
35+
sample_events
36+
37+
hitcnt=`grep kmem_cache_free trace| grep $target_func | wc -l`
38+
misscnt=`grep kmem_cache_free trace| grep -v $target_func | wc -l`
2439

2540
if [ $hitcnt -eq 0 ]; then
2641
exit_fail
@@ -30,20 +45,14 @@ if [ $misscnt -gt 0 ]; then
3045
exit_fail
3146
fi
3247

33-
address=`grep ' exit_mmap$' /proc/kallsyms | cut -d' ' -f1`
48+
address=`grep " ${target_func}\$" /proc/kallsyms | cut -d' ' -f1`
3449

3550
echo "Test event filter function address"
36-
echo 0 > tracing_on
37-
echo 0 > events/enable
38-
echo > trace
3951
echo "call_site.function == 0x$address" > events/kmem/kmem_cache_free/filter
40-
echo 1 > events/kmem/kmem_cache_free/enable
41-
echo 1 > tracing_on
42-
sleep 1
43-
echo 0 > events/kmem/kmem_cache_free/enable
52+
sample_events
4453

45-
hitcnt=`grep kmem_cache_free trace| grep exit_mmap | wc -l`
46-
misscnt=`grep kmem_cache_free trace| grep -v exit_mmap | wc -l`
54+
hitcnt=`grep kmem_cache_free trace| grep $target_func | wc -l`
55+
misscnt=`grep kmem_cache_free trace| grep -v $target_func | wc -l`
4756

4857
if [ $hitcnt -eq 0 ]; then
4958
exit_fail

0 commit comments

Comments
 (0)