diff options
author | Daniel Borkmann <daniel@iogearbox.net> | 2016-12-18 01:52:57 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-12-17 21:27:44 -0500 |
commit | aafe6ae9cee32df85eb5e8bb6dd1d918e6807b09 (patch) | |
tree | 4aa9958d1ddf599f4ed32d491f8ab217c9747056 /kernel/bpf/syscall.c | |
parent | 40e972ab652f3e9b84a8f24f517345b460962c29 (diff) | |
download | linux-aafe6ae9cee32df85eb5e8bb6dd1d918e6807b09.tar.gz linux-aafe6ae9cee32df85eb5e8bb6dd1d918e6807b09.tar.bz2 linux-aafe6ae9cee32df85eb5e8bb6dd1d918e6807b09.zip |
bpf: dynamically allocate digest scratch buffer
Geert rightfully complained that 7bd509e311f4 ("bpf: add prog_digest
and expose it via fdinfo/netlink") added a too large allocation of
variable 'raw' from bss section, and should instead be done dynamically:
# ./scripts/bloat-o-meter kernel/bpf/core.o.1 kernel/bpf/core.o.2
add/remove: 3/0 grow/shrink: 0/0 up/down: 33291/0 (33291)
function old new delta
raw - 32832 +32832
[...]
Since this is only relevant during program creation path, which can be
considered slow-path anyway, lets allocate that dynamically and be not
implicitly dependent on verifier mutex. Move bpf_prog_calc_digest() at
the beginning of replace_map_fd_with_map_ptr() and also error handling
stays straight forward.
Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'kernel/bpf/syscall.c')
-rw-r--r-- | kernel/bpf/syscall.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index 4819ec9d95f6..35d674c1f12e 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -811,7 +811,7 @@ static int bpf_prog_load(union bpf_attr *attr) err = -EFAULT; if (copy_from_user(prog->insns, u64_to_user_ptr(attr->insns), - prog->len * sizeof(struct bpf_insn)) != 0) + bpf_prog_insn_size(prog)) != 0) goto free_prog; prog->orig_prog = NULL; |