summaryrefslogtreecommitdiff
path: root/include/linux/rtc
diff options
context:
space:
mode:
authorRui Qi <qirui.001@bytedance.com>2026-08-07 16:15:12 +0800
committerMasami Hiramatsu (Google) <mhiramat@kernel.org>2026-08-08 01:02:21 +0900
commit24aa630f6259e6a2107936c06fed72063f712b64 (patch)
tree6689fd627905df46b23d97a08a94f2c0b49476e9 /include/linux/rtc
parentf9a2394a23482bfd330911e9c8295b71724feacd (diff)
downloadlinux-24aa630f6259e6a2107936c06fed72063f712b64.tar.gz
linux-24aa630f6259e6a2107936c06fed72063f712b64.zip
selftests/ftrace: Convert ELF entry point to file offset in uprobe test
The add_remove_uprobe test uses readelf -h to obtain the ELF entry point (e_entry) and passes it directly as the offset to uprobe_events. However, uprobe_events expects a file offset, not a virtual address. For PIE binaries, the virtual address happens to equal the file offset because the first LOAD segment has p_vaddr == p_offset, so the test works by coincidence. But for non-PIE executables, e_entry is an absolute virtual address that can far exceed the file size. When the probe is enabled, uprobe_register() checks offset > i_size_read(inode) and rejects it with -EINVAL. Fix this by converting the virtual address to a file offset using the ELF program headers: scan readelf -lW output for the LOAD segment containing the entry point, then compute file_offset = e_entry - p_vaddr + p_offset. For PIE binaries the result is unchanged; for non-PIE binaries the offset is correctly translated. The conversion uses only POSIX shell primitives, with no dependency on gawk or perl. Link: https://lore.kernel.org/all/20260807081512.2974757-3-qirui.001@bytedance.com/ Fixes: dc4b165855f2 ("selftests/ftrace: Use readelf to find entry point in uprobe test") Cc: stable@vger.kernel.org Signed-off-by: Rui Qi <qirui.001@bytedance.com> Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Diffstat (limited to 'include/linux/rtc')
0 files changed, 0 insertions, 0 deletions