linux-stable/tools/bpf/bpftool
Yonghong Song 573b3aa694 tools/bpftool: fix a percpu_array map dump problem
I hit the following problem when I tried to use bpftool
to dump a percpu array.

  $ sudo ./bpftool map show
  61: percpu_array  name stub  flags 0x0
          key 4B  value 4B  max_entries 1  memlock 4096B
  ...
  $ sudo ./bpftool map dump id 61
  bpftool: malloc.c:2406: sysmalloc: Assertion
  `(old_top == initial_top (av) && old_size == 0) || \
   ((unsigned long) (old_size) >= MINSIZE && \
   prev_inuse (old_top) && \
   ((unsigned long) old_end & (pagesize - 1)) == 0)'
  failed.
  Aborted

Further debugging revealed that this is due to
miscommunication between bpftool and kernel.
For example, for the above percpu_array with value size of 4B.
The map info returned to user space has value size of 4B.

In bpftool, the values array for lookup is allocated like:
   info->value_size * get_possible_cpus() = 4 * get_possible_cpus()
In kernel (kernel/bpf/syscall.c), the values array size is
rounded up to multiple of 8.
   round_up(map->value_size, 8) * num_possible_cpus()
   = 8 * num_possible_cpus()
So when kernel copies the values to user buffer, the kernel will
overwrite beyond user buffer boundary.

This patch fixed the issue by allocating and stepping through
percpu map value array properly in bpftool.

Fixes: 71bb428fe2 ("tools: bpf: add bpftool")
Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2018-07-31 00:37:09 +02:00
..
bash-completion bpftool: Support sendmsg{4,6} attach types 2018-05-30 12:53:00 +02:00
Documentation bpftool: Support sendmsg{4,6} attach types 2018-05-30 12:53:00 +02:00
.gitignore selftests/bpf: ignore build products 2018-05-10 00:41:06 +02:00
cfg.c tools: bpftool: generate .dot graph from CFG information 2018-03-01 18:29:49 -08:00
cfg.h tools: bpftool: detect sub-programs from the eBPF sequence 2018-03-01 18:29:48 -08:00
cgroup.c bpftool: Support sendmsg{4,6} attach types 2018-05-30 12:53:00 +02:00
common.c tools/bpftool: Fix segfault case regarding 'pin' arguments 2018-07-20 10:16:54 +02:00
jit_disasm.c tools: bpftool: improve architecture detection by using ifindex 2018-01-18 01:26:15 +01:00
json_writer.c tools: bpftool: add JSON output for bpftool prog dump xlated * command 2017-10-24 01:25:08 +01:00
json_writer.h tools: bpftool: add JSON output for bpftool prog dump xlated * command 2017-10-24 01:25:08 +01:00
main.c tools/bpftool: add perf subcommand 2018-05-24 18:18:20 -07:00
main.h tools/bpftool: add perf subcommand 2018-05-24 18:18:20 -07:00
Makefile tools: bpftool: add simple perf event output reader 2018-05-04 23:41:04 +02:00
map.c tools/bpftool: fix a percpu_array map dump problem 2018-07-31 00:37:09 +02:00
map_perf_ring.c tools: bpf: move the event reading loop to libbpf 2018-05-11 01:40:52 +02:00
perf.c tools/bpftool: fix a bug in bpftool perf 2018-06-13 02:03:17 +02:00
prog.c tools: bpftool: remember to close the libbpf object after prog load 2018-06-21 23:07:13 +02:00
xlated_dumper.c tools: bpftool: add delimiters to multi-function JITed dumps 2018-05-24 09:20:50 +02:00
xlated_dumper.h tools: bpftool: add delimiters to multi-function JITed dumps 2018-05-24 09:20:50 +02:00