Skip to content

Commit

Permalink
selftests/ftrace: Use readelf to find entry point in uprobe test
Browse files Browse the repository at this point in the history
The uprobe events test fails on s390, but also on x86 (Fedora 41). The
problem appears to be that there is an assumption that adding a uprobe to
the beginning of the executable mapping of /bin/sh is sufficient to trigger
a uprobe event when /bin/sh is executed.

This assumption is not necessarily true. Therefore use "readelf -h" to find
the entry point address of /bin/sh and use this address when adding the
uprobe event.

This adds a dependency to readelf which is not always installed. Therefore
add a check and exit with exit_unresolved if it is not installed.

Link: https://lore.kernel.org/r/20250220130102.2079179-1-hca@linux.ibm.com
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
  • Loading branch information
Heiko Carstens authored and Shuah Khan committed Feb 26, 2025
1 parent e402c70 commit dc4b165
Showing 1 changed file with 7 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,18 @@
# description: Generic dynamic event - add/remove/test uprobe events
# requires: uprobe_events

if ! which readelf > /dev/null 2>&1 ; then
echo "No readelf found. skipped."
exit_unresolved
fi

echo 0 > events/enable
echo > dynamic_events

REALBIN=`readlink -f /bin/sh`
ENTRYPOINT=`readelf -h ${REALBIN} | grep Entry | sed -e 's/[^0]*//'`

echo 'cat /proc/$$/maps' | /bin/sh | \
grep "r-xp .*${REALBIN}$" | \
awk '{printf "p:myevent %s:0x%s\n", $6,$3 }' >> uprobe_events
echo "p:myevent ${REALBIN}:${ENTRYPOINT}" >> uprobe_events

grep -q myevent uprobe_events
test -d events/uprobes/myevent
Expand Down

0 comments on commit dc4b165

Please sign in to comment.