From patchwork Wed Apr 3 18:22:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Borkmann X-Patchwork-Id: 1076273 Return-Path: X-Original-To: incoming-bpf@patchwork.ozlabs.org Delivered-To: patchwork-incoming-bpf@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=bpf-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=iogearbox.net Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44ZDwj6Gzdz9sSP for ; Thu, 4 Apr 2019 05:23:33 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726193AbfDCSX3 (ORCPT ); Wed, 3 Apr 2019 14:23:29 -0400 Received: from www62.your-server.de ([213.133.104.62]:55382 "EHLO www62.your-server.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726337AbfDCSX3 (ORCPT ); Wed, 3 Apr 2019 14:23:29 -0400 Received: from [2a02:120b:c3fc:feb0:dda7:bd28:a848:50e2] (helo=localhost) by www62.your-server.de with esmtpsa (TLSv1.2:DHE-RSA-AES256-GCM-SHA384:256) (Exim 4.89_1) (envelope-from ) id 1hBkXg-0006CK-Jh; Wed, 03 Apr 2019 20:23:20 +0200 From: Daniel Borkmann To: bpf@vger.kernel.org Cc: ast@kernel.org, joe@wand.net.nz, yhs@fb.com, andrii.nakryiko@gmail.com, kafai@fb.com, Daniel Borkmann Subject: [PATCH bpf-next v3 00/15] BPF support for global data Date: Wed, 3 Apr 2019 20:22:51 +0200 Message-Id: X-Mailer: git-send-email 2.9.5 X-Authenticated-Sender: daniel@iogearbox.net X-Virus-Scanned: Clear (ClamAV 0.100.3/25408/Wed Apr 3 09:53:31 2019) Sender: bpf-owner@vger.kernel.org Precedence: bulk List-Id: netdev.vger.kernel.org This series is a major rework of previously submitted libbpf patches [0] in order to add global data support for BPF. The kernel has been extended to add proper infrastructure that allows for full .bss/.data/.rodata sections on BPF loader side based upon feedback from LPC discussions [1]. Latter support is then also added into libbpf in this series which allows for more natural C-like programming of BPF programs. For more information on loader, please refer to 'bpf, libbpf: support global data/bss/ rodata sections' patch in this series. Joint work with Joe Stringer. Thanks a lot! Note, here's the current state now updated with full BTF support in bpftool to be able to inspect global data maps. I'm planning to do one last round on the series (at latest end of week), so don't apply yet. ;) rfc v3 -> v3: - Implement BTF support in kernel, libbpf, bpftool, add tests - Fix idx + off conversion (Andrii) - Document lower / higher bits for direct value access (Andrii) - Add tests with small value size (Andrii) v2 -> rfc v3: - Add index selection into ldimm64 (Andrii) - Fix missing fdput() (Jann) - Reject invalid flags in BPF_F_*_PROG (Jakub) - Complete rework of libbpf support, includes: - Add objname to map name (Stanislav) - Make .rodata map full read-only after setup (Andrii) - Merge relocation handling into single one (Andrii) - Store global maps into obj->maps array (Andrii, Alexei) - Debug message when skipping section (Andrii) - Reject non-static global data till we have semantics for sharing them (Yonghong, Andrii, Alexei) - More test cases and completely reworked prog test (Alexei) - Fixes, cleanups, etc all over the set - Not yet addressed: - Make BTF mandatory for these maps (Alexei) -> Waiting till BTF support for these lands first v1 -> v2: - Instead of 32-bit static data, implement full global data support (Alexei) [0] https://patchwork.ozlabs.org/cover/1040290/ [1] http://vger.kernel.org/lpc-bpf2018.html#session-3 Daniel Borkmann (13): bpf: implement lookup-free direct value access for maps bpf: add program side {rd,wr}only support for maps bpf: add syscall side map lock support bpf: allow . char as part of the object name bpf: add specification for BTF Var and DataSec kinds bpf: kernel side support for BTF Var and DataSec bpf: allow for key-less BTF in array map bpf: sync {btf,bpf}.h uapi header from tools infrastructure bpf, libbpf: support global data/bss/rodata sections bpf, libbpf: add support for BTF Var and DataSec bpf: bpftool support for dumping data/bss/rodata sections bpf, selftest: test {rd,wr}only flags and direct value access bpf, selftest: add test cases for BTF Var and DataSec Joe Stringer (2): bpf, libbpf: refactor relocation handling bpf, selftest: test global data/bss/rodata sections Documentation/bpf/btf.rst | 57 +++ include/linux/bpf.h | 35 +- include/linux/bpf_verifier.h | 4 + include/linux/btf.h | 2 + include/uapi/linux/bpf.h | 24 +- include/uapi/linux/btf.h | 32 +- kernel/bpf/arraymap.c | 47 +- kernel/bpf/btf.c | 400 ++++++++++++++- kernel/bpf/core.c | 3 +- kernel/bpf/disasm.c | 5 +- kernel/bpf/hashtab.c | 6 +- kernel/bpf/local_storage.c | 8 +- kernel/bpf/lpm_trie.c | 6 +- kernel/bpf/queue_stack_maps.c | 6 +- kernel/bpf/syscall.c | 126 ++++- kernel/bpf/verifier.c | 155 ++++-- tools/bpf/bpftool/btf_dumper.c | 59 +++ tools/bpf/bpftool/map.c | 10 +- tools/bpf/bpftool/xlated_dumper.c | 6 + tools/include/linux/filter.h | 14 + tools/include/uapi/linux/bpf.h | 24 +- tools/include/uapi/linux/btf.h | 32 +- tools/lib/bpf/bpf.c | 10 + tools/lib/bpf/bpf.h | 1 + tools/lib/bpf/btf.c | 97 +++- tools/lib/bpf/btf.h | 3 + tools/lib/bpf/libbpf.c | 537 ++++++++++++++++---- tools/lib/bpf/libbpf.h | 5 + tools/lib/bpf/libbpf.map | 7 + tools/testing/selftests/bpf/bpf_helpers.h | 8 +- .../testing/selftests/bpf/prog_tests/global_data.c | 157 ++++++ .../testing/selftests/bpf/progs/test_global_data.c | 106 ++++ tools/testing/selftests/bpf/test_btf.c | 552 ++++++++++++++++++++- tools/testing/selftests/bpf/test_verifier.c | 53 +- .../testing/selftests/bpf/verifier/array_access.c | 159 ++++++ .../selftests/bpf/verifier/direct_value_access.c | 262 ++++++++++ 36 files changed, 2812 insertions(+), 206 deletions(-) create mode 100644 tools/testing/selftests/bpf/prog_tests/global_data.c create mode 100644 tools/testing/selftests/bpf/progs/test_global_data.c create mode 100644 tools/testing/selftests/bpf/verifier/direct_value_access.c