From: Alexei Starovoitov Date: Tue, 9 Jun 2026 19:42:04 +0000 (-0700) Subject: Merge branch 'bpf-lpm_trie-allow-sleepable-bpf-programs-to-use-lpm-tries' X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c15261b1bba0bb7921552cdd86c8b0202697a8f9;p=thirdparty%2Flinux.git Merge branch 'bpf-lpm_trie-allow-sleepable-bpf-programs-to-use-lpm-tries' Vlad Poenaru says: ==================== bpf, lpm_trie: Allow sleepable BPF programs to use LPM tries trie_lookup_elem() annotates its rcu_dereference_check() walks with only rcu_read_lock_bh_held(), so a sleepable BPF program that touches an LPM trie (e.g. a sleepable LSM hook calling bpf_map_lookup_elem()) trips a "suspicious RCU usage" lockdep splat on debug kernels: it holds only rcu_read_lock_trace(), which that annotation does not accept. Patch 1 relaxes the rcu_dereference annotations in the trie walks so they no longer trip lockdep from the Tasks Trace context, including the trie_update_elem()/trie_delete_elem() writer walks (protected by trie->lock). Patch 2 adds BPF_MAP_TYPE_LPM_TRIE to the verifier's sleepable map whitelist so sleepable programs can reference an LPM trie directly, not just as the inner map of a map-of-maps. LPM trie nodes are reclaimed via bpf_mem_cache_free_rcu(), which chains a regular RCU grace period into a Tasks Trace grace period before freeing -- the same discipline BPF_MAP_TYPE_HASH relies on for sleepable access. Changes since v1: - Split into a 2-patch series. - Patch 1 now also converts the trie_update_elem()/trie_delete_elem() walks from rcu_dereference() to rcu_dereference_protected(*p, 1), addressing review feedback that v1 only fixed the lookup path and left the same splat on the writer paths. - New patch 2 adds the verifier whitelist entry so the fix is actually reachable for directly-referenced LPM tries. - Retitled v1 ("Allow lookups from sleepable BPF programs"). v1: https://lore.kernel.org/all/20260529174233.2954240-1-vlad.wing@gmail.com/ ==================== Link: https://patch.msgid.link/20260609135558.193287-1-vlad.wing@gmail.com Signed-off-by: Alexei Starovoitov --- c15261b1bba0bb7921552cdd86c8b0202697a8f9