lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <064cc6f1-8406-4cb4-8eb8-b02755079d7c@linux.dev>
Date: Wed, 6 Aug 2025 11:07:00 -0700
From: Yonghong Song <yonghong.song@...ux.dev>
To: Jiawei Zhao <phoenix500526@....com>, ast@...nel.org
Cc: daniel@...earbox.net, andrii@...nel.org, bpf@...r.kernel.org,
 linux-kselftest@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v7 0/2] libbpf: fix USDT SIB argument handling causing
 unrecognized register error



On 8/6/25 2:24 AM, Jiawei Zhao wrote:
> When using GCC on x86-64 to compile an usdt prog with -O1 or higher
> optimization, the compiler will generate SIB addressing mode for global
> array and PC-relative addressing mode for global variable,
> e.g. "1@-96(%rbp,%rax,8)" and "-1@...1(%rip)".
>
> The current USDT implementation in libbpf cannot parse these two formats,
> causing `bpf_program__attach_usdt()` to fail with -ENOENT
> (unrecognized register).
>
> This patch series adds support for SIB addressing mode in USDT probes.
> The main changes include:
> - add correct handling logic for SIB-addressed arguments in
>    `parse_usdt_arg`.
> - add an usdt_o2 test case to cover SIB addressing mode.
>
> Testing shows that the SIB probe correctly generates 8@(%rcx,%rax,8)
> argument spec and passes all validation checks.
>
> The modification history of this patch series:
> Change since v1:
> - refactor the code to make it more readable
> - modify the commit message to explain why and how
>
> Change since v2:
> - fix the `scale` uninitialized error
>
> Change since v3:
> - force -O2 optimization for usdt.test.o to generate SIB addressing usdt
>    and pass all test cases.
>
> Change since v4:
> - split the patch into two parts, one for the fix and the other for the
>    test
>
> Change since v5:
> - Only enable optimization for x86 architecture to generate SIB addressing
>    usdt argument spec.
>
> Change since v6:
> - Add an usdt_o2 test case to cover SIB addressing mode.
> - Reinstate the usdt.c test case.
>
> Do we need to add support for PC-relative USDT argument spec handling in
> libbpf? I have some interest in this question, but currently have no
> ideas. Getting offsets based on symbols requires dependency on the symbol
> table. However, once the binary file is stripped, the symtab will also be
> removed, which will cause this approach to fail. Does anyone have any
> thoughts on this?
>
>
> Jiawei Zhao (2):
>    libbpf: fix USDT SIB argument handling causing unrecognized register
>      error
>    selftests/bpf: Force -O2 for USDT selftests to cover SIB handling
>      logic
>
>   tools/lib/bpf/usdt.bpf.h                      | 33 ++++++++-
>   tools/lib/bpf/usdt.c                          | 43 +++++++++--
>   tools/testing/selftests/bpf/Makefile          |  8 +++
>   .../selftests/bpf/prog_tests/usdt_o2.c        | 71 +++++++++++++++++++
>   .../selftests/bpf/progs/test_usdt_o2.c        | 37 ++++++++++
>   5 files changed, 185 insertions(+), 7 deletions(-)
>   create mode 100644 tools/testing/selftests/bpf/prog_tests/usdt_o2.c
>   create mode 100644 tools/testing/selftests/bpf/progs/test_usdt_o2.c
>
Please add proper tag like [PATCH bpf-next v7 ...] so CI can test it
properly.


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ