Re: [PATCH bpf-next v2 00/11] bpf: add support for new btf kind BTF_KIND_TAG

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

 





On 9/13/21 9:40 AM, Jose E. Marchesi wrote:

cc Jose E. Marchesi

Hi, Jose, just let you know that the BTF format for BTF_KIND_TAG is
changed since v1 as the new format can simplify kernel/libbpf
implementation. Thanks!

Noted.  Thanks for the update.

Hi, Jose,

This is just another update on btf_tag development.
Now, btf_tag is divided into btf_decl_tag and btf_type_tag
for tagging declarations and types as clang compiler prefers
not to mix them with each other. All compiler works in llvm
has done and you can check upstream llvm-project "main" branch
for implementation.

The patch set below (under review)
   https://lore.kernel.org/bpf/20211209173537.1525283-1-yhs@xxxxxx/
actually tried to use btf_type_tag for linux kernel __user
annotation so bpf verifier can use it.

Another question from Omar (open source drgn maintainer)

https://developers.facebook.com/blog/post/2021/12/09/drgn-how-linux-kernel-team-meta-debugs-kernel-scale/
mentioned that btf_tag information will also help drgn since it
can then especially distinguish between __percpu pointer from
other pointers. Currently drgn is using dwarf, clang compiled
kernel puts btf_tag information in dwarf. Based on our earlier
discussion, gcc intends to generate btf tags for BTF only. Maybe
we could discuss to also generate for dwarf? Do we need a flag?

Please let me know if you have any questions.
Happy to help in whatever way to get gcc also implementing btf tag
support.

Thanks!

Yonghong



On 9/13/21 8:51 AM, Yonghong Song wrote:
LLVM14 added support for a new C attribute ([1])
    __attribute__((btf_tag("arbitrary_str")))
This attribute will be emitted to dwarf ([2]) and pahole
will convert it to BTF. Or for bpf target, this
attribute will be emitted to BTF directly ([3], [4]).
The attribute is intended to provide additional
information for
    - struct/union type or struct/union member
    - static/global variables
    - static/global function or function parameter.
This new attribute can be used to add attributes
to kernel codes, e.g., pre- or post- conditions,
allow/deny info, or any other info in which only
the kernel is interested. Such attributes will
be processed by clang frontend and emitted to
dwarf, converting to BTF by pahole. Ultimiately
the verifier can use these information for
verification purpose.
The new attribute can also be used for bpf
programs, e.g., tagging with __user attributes
for function parameters, specifying global
function preconditions, etc. Such information
may help verifier to detect user program
bugs.
After this series, pahole dwarf->btf converter
will be enhanced to support new llvm tag
for btf_tag attribute. With pahole support,
we will then try to add a few real use case,
e.g., __user/__rcu tagging, allow/deny list,
some kernel function precondition, etc,
in the kernel.
In the rest of the series, Patches 1-2 had
kernel support. Patches 3-4 added
libbpf support. Patch 5 added bpftool
support. Patches 6-10 added various selftests.
Patch 11 added documentation for the new kind.
    [1] https://reviews.llvm.org/D106614
    [2] https://reviews.llvm.org/D106621
    [3] https://reviews.llvm.org/D106622
    [4] https://reviews.llvm.org/D109560
Changelog:
    v1 -> v2:
      - BTF ELF format changed in llvm ([4] above),
        so cross-board change to use the new format.
      - Clarified in commit message that BTF_KIND_TAG
        is not emitted by bpftool btf dump format c.
      - Fix various comments from Andrii.
Yonghong Song (11):
    btf: change BTF_KIND_* macros to enums
    bpf: support for new btf kind BTF_KIND_TAG
    libbpf: rename btf_{hash,equal}_int to btf_{hash,equal}_int_tag
    libbpf: add support for BTF_KIND_TAG
    bpftool: add support for BTF_KIND_TAG
    selftests/bpf: test libbpf API function btf__add_tag()
    selftests/bpf: change NAME_NTH/IS_NAME_NTH for BTF_KIND_TAG format
    selftests/bpf: add BTF_KIND_TAG unit tests
    selftests/bpf: test BTF_KIND_TAG for deduplication
    selftests/bpf: add a test with a bpf program with btf_tag attributes
    docs/bpf: add documentation for BTF_KIND_TAG
   Documentation/bpf/btf.rst                     |  27 +-
   include/uapi/linux/btf.h                      |  52 +--
   kernel/bpf/btf.c                              | 120 +++++++
   tools/bpf/bpftool/btf.c                       |  12 +
   tools/include/uapi/linux/btf.h                |  52 +--
   tools/lib/bpf/btf.c                           |  85 ++++-
   tools/lib/bpf/btf.h                           |  15 +
   tools/lib/bpf/btf_dump.c                      |   3 +
   tools/lib/bpf/libbpf.c                        |  31 +-
   tools/lib/bpf/libbpf.map                      |   5 +
   tools/lib/bpf/libbpf_internal.h               |   2 +
   tools/testing/selftests/bpf/btf_helpers.c     |   7 +-
   tools/testing/selftests/bpf/prog_tests/btf.c  | 318 ++++++++++++++++--
   .../selftests/bpf/prog_tests/btf_tag.c        |  14 +
   .../selftests/bpf/prog_tests/btf_write.c      |  21 ++
   tools/testing/selftests/bpf/progs/tag.c       |  39 +++
   tools/testing/selftests/bpf/test_btf.h        |   3 +
   17 files changed, 736 insertions(+), 70 deletions(-)
   create mode 100644 tools/testing/selftests/bpf/prog_tests/btf_tag.c
   create mode 100644 tools/testing/selftests/bpf/progs/tag.c




[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