mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-27 12:57:53 +00:00
bpf, lpm: Fix check prefixlen before walking trie
[ Upstream commit9b75dbeb36
] When looking up an element in LPM trie, the condition 'matchlen == trie->max_prefixlen' will never return true, if key->prefixlen is larger than trie->max_prefixlen. Consequently all elements in the LPM trie will be visited and no element is returned in the end. To resolve this, check key->prefixlen first before walking the LPM trie. Fixes:b95a5c4db0
("bpf: add a longest prefix match trie map implementation") Signed-off-by: Florian Lehner <dev@der-flo.net> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/bpf/20231105085801.3742-1-dev@der-flo.net Signed-off-by: Alexei Starovoitov <ast@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
cd1896b922
commit
1959a560ac
1 changed files with 3 additions and 0 deletions
|
@ -231,6 +231,9 @@ static void *trie_lookup_elem(struct bpf_map *map, void *_key)
|
|||
struct lpm_trie_node *node, *found = NULL;
|
||||
struct bpf_lpm_trie_key *key = _key;
|
||||
|
||||
if (key->prefixlen > trie->max_prefixlen)
|
||||
return NULL;
|
||||
|
||||
/* Start walking the trie from the root node ... */
|
||||
|
||||
for (node = rcu_dereference_check(trie->root, rcu_read_lock_bh_held());
|
||||
|
|
Loading…
Reference in a new issue