Re: [PATCH bpf-next] libbpf: don't adjust USDT semaphore address if .stapsdt.base addr is missing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
> 
> 




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux