[bpf-next,0/2] CO-RE relocation support for flexible arrays
mbox series

Message ID 20191215070844.1014385-1-andriin@fb.com
Headers show
Series
  • CO-RE relocation support for flexible arrays
Related show

Message

Andrii Nakryiko Dec. 15, 2019, 7:08 a.m. UTC
Add support for flexible array accesses in a relocatable manner in BPF CO-RE.
It's a typical pattern in C, and kernel in particular, to provide
a fixed-length struct with zero-sized or dimensionless array at the end. In
such cases variable-sized array contents follows immediately after the end of
a struct. This patch set adds support for such access pattern by allowing
accesses to such arrays.

Patch #1 adds libbpf support. Patch #2 adds few test cases for validation.

Andrii Nakryiko (2):
  libbpf: support flexible arrays in CO-RE
  selftests/bpf: add flexible array relocation tests

 tools/lib/bpf/libbpf.c                        | 34 +++++++++++++---
 .../selftests/bpf/prog_tests/core_reloc.c     |  4 ++
 ...f__core_reloc_arrays___equiv_zero_sz_arr.c |  3 ++
 ..._core_reloc_arrays___err_bad_zero_sz_arr.c |  3 ++
 .../btf__core_reloc_arrays___fixed_arr.c      |  3 ++
 .../selftests/bpf/progs/core_reloc_types.h    | 39 +++++++++++++++++++
 .../bpf/progs/test_core_reloc_arrays.c        |  8 ++--
 7 files changed, 85 insertions(+), 9 deletions(-)
 create mode 100644 tools/testing/selftests/bpf/progs/btf__core_reloc_arrays___equiv_zero_sz_arr.c
 create mode 100644 tools/testing/selftests/bpf/progs/btf__core_reloc_arrays___err_bad_zero_sz_arr.c
 create mode 100644 tools/testing/selftests/bpf/progs/btf__core_reloc_arrays___fixed_arr.c

Comments

Alexei Starovoitov Dec. 16, 2019, 12:56 a.m. UTC | #1
On Sat, Dec 14, 2019 at 11:09 PM Andrii Nakryiko <andriin@fb.com> wrote:
>
> Add support for flexible array accesses in a relocatable manner in BPF CO-RE.
> It's a typical pattern in C, and kernel in particular, to provide
> a fixed-length struct with zero-sized or dimensionless array at the end. In
> such cases variable-sized array contents follows immediately after the end of
> a struct. This patch set adds support for such access pattern by allowing
> accesses to such arrays.
>
> Patch #1 adds libbpf support. Patch #2 adds few test cases for validation.

Applied. Thanks