On Thu, Nov 21, 2024 at 02:45:58PM -0800, Andrii Nakryiko wrote: > USDT ELF note optionally can record an offset of .stapsdt.base, which is > used to make adjustments to USDT target attach address. Currently, > libbpf will do this address adjustment unconditionally if it finds > .stapsdt.base ELF section in target binary. But there is a corner case > where .stapsdt.base ELF section is present, but specific USDT note > doesn't reference it. In such case, libbpf will basically just add base > address and end up with absolutely incorrect USDT target address. > > This adjustment has to be done only if both .stapsdt.sema section is > present and USDT note is recording a reference to it. > > Fixes: 74cc6311cec9 ("libbpf: Add USDT notes parsing and resolution logic") > Signed-off-by: Andrii Nakryiko <andrii@xxxxxxxxxx> nice, lgtm Acked-by: Jiri Olsa <jolsa@xxxxxxxxxx> jirka > --- > tools/lib/bpf/usdt.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tools/lib/bpf/usdt.c b/tools/lib/bpf/usdt.c > index 5f085736c6c4..4e4a52742b01 100644 > --- a/tools/lib/bpf/usdt.c > +++ b/tools/lib/bpf/usdt.c > @@ -661,7 +661,7 @@ static int collect_usdt_targets(struct usdt_manager *man, Elf *elf, const char * > * [0] https://sourceware.org/systemtap/wiki/UserSpaceProbeImplementation > */ > usdt_abs_ip = note.loc_addr; > - if (base_addr) > + if (base_addr && note.base_addr) > usdt_abs_ip += base_addr - note.base_addr; > > /* When attaching uprobes (which is what USDTs basically are) > -- > 2.43.5 > >