Add a new attribute to the bpf(BPF_PROG_LOAD) system call. If this new attribute is non-zero, then the fd_array is considered to be a continuous array of the fd_array_cnt length and to contain only proper map file descriptors, or btf file descriptors, or zeroes. This change allows maps, which aren't referenced directly by a BPF program, to be bound to the program _and_ also to be present during the program verification (so BPF_PROG_BIND_MAP is not enough for this use case). The primary reason for this change is that it is a prerequisite for adding "instruction set" maps, which are both non-referenced by the program and must be present during the program verification. The first three commits add the new functionality, the fourth adds corresponding self-tests, and the last one is a small additional fix. Anton Protopopov (5): bpf: add a __btf_get_by_fd helper bpf: move map/prog compatibility checks bpf: add fd_array_cnt attribute for prog_load selftests/bpf: Add tests for fd_array_cnt bpf: fix potential error return include/linux/btf.h | 13 + include/uapi/linux/bpf.h | 10 + kernel/bpf/btf.c | 13 +- kernel/bpf/core.c | 9 +- kernel/bpf/syscall.c | 2 +- kernel/bpf/verifier.c | 204 ++++++---- tools/include/uapi/linux/bpf.h | 10 + .../selftests/bpf/prog_tests/fd_array.c | 374 ++++++++++++++++++ 8 files changed, 557 insertions(+), 78 deletions(-) create mode 100644 tools/testing/selftests/bpf/prog_tests/fd_array.c -- 2.34.1