This set adds support for kptrs in percpu hashmaps, percpu LRU hashmaps, and local storage maps (covering sk, cgrp, task, inode). There are also minor miscellaneous cleanups rolled in, unrelated to the set, that I collected over time. Feel free to drop them, they have been intentionally placed after the kptr support to ease partial application of the series. Tests are expanded to test more existing maps at runtime and also test the code path for the local storage maps (which is shared by all implementations). A question for reviewers is what the position of the BPF runtime should be on dealing with reference cycles that can be created by BPF programs at runtime using this additional support. For instance, one can store the kptr of the task in its own task local storage, creating a cycle which prevents destruction of task local storage. Cycles can be formed using arbitrarily long kptr ownership chains. Therefore, just preventing storage of such kptrs in some maps is not a sufficient solution, and is more likely to hurt usability. There is precedence in existing runtimes which promise memory safety, like Rust, where reference cycles and memory leaks are permitted. However, traditionally the safety guarantees of BPF have been stronger. Thus, more discussion and thought is invited on this topic to ensure we cover all usage aspects. Changelog: ---------- v1 -> v2 v1: https://lore.kernel.org/bpf/20230219155249.1755998-1-memxor@xxxxxxxxx * Simplify selftests, fix a couple of bugs Kumar Kartikeya Dwivedi (7): bpf: Support kptrs in percpu hashmap and percpu LRU hashmap bpf: Support kptrs in local storage maps bpf: Annotate data races in bpf_local_storage bpf: Remove unused MEM_ALLOC | PTR_TRUSTED checks bpf: Fix check_reg_type for PTR_TO_BTF_ID bpf: Wrap register invalidation with a helper selftests/bpf: Add more tests for kptrs in maps kernel/bpf/bpf_local_storage.c | 51 ++- kernel/bpf/hashtab.c | 59 +-- kernel/bpf/syscall.c | 8 +- kernel/bpf/verifier.c | 65 ++-- .../selftests/bpf/prog_tests/map_kptr.c | 122 ++++-- tools/testing/selftests/bpf/progs/map_kptr.c | 353 +++++++++++++++--- 6 files changed, 540 insertions(+), 118 deletions(-) base-commit: 951bce29c8988209cc359e1fa35a4aaa35542fd5 -- 2.39.2