diff options
author | Martin KaFai Lau <kafai@fb.com> | 2017-03-22 18:00:32 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-03-22 23:45:45 +0100 |
commit | fad73a1a35ea61f13607a391aca669caad8c04ca (patch) | |
tree | 1070c51ee7354ee35ef1e23f17b7ce483c316144 /kernel/bpf/map_in_map.h | |
parent | net: stmmac: fix dma operation mode config for older versions (diff) | |
download | linux-fad73a1a35ea61f13607a391aca669caad8c04ca.tar.xz linux-fad73a1a35ea61f13607a391aca669caad8c04ca.zip |
bpf: Fix and simplifications on inline map lookup
Fix in verifier:
For the same bpf_map_lookup_elem() instruction (i.e. "call 1"),
a broken case is "a different type of map could be used for the
same lookup instruction". For example, an array in one case and a
hashmap in another. We have to resort to the old dynamic call behavior
in this case. The fix is to check for collision on insn_aux->map_ptr.
If there is collision, don't inline the map lookup.
Please see the "do_reg_lookup()" in test_map_in_map_kern.c in the later
patch for how-to trigger the above case.
Simplifications on array_map_gen_lookup():
1. Calculate elem_size from map->value_size. It removes the
need for 'struct bpf_array' which makes the later map-in-map
implementation easier.
2. Remove the 'elem_size == 1' test
Fixes: 81ed18ab3098 ("bpf: add helper inlining infra and optimize map_array lookup")
Signed-off-by: Martin KaFai Lau <kafai@fb.com>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'kernel/bpf/map_in_map.h')
0 files changed, 0 insertions, 0 deletions