Skip to content

Commit

Permalink
bpf: convert temp arrays to kvcalloc
Browse files Browse the repository at this point in the history
Temporary arrays used during program verification need to be vmalloc-ed
to support large bpf programs.

Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
  • Loading branch information
Alexei Starovoitov authored and Daniel Borkmann committed Apr 3, 2019
1 parent 25af32d commit 71dde68
Showing 1 changed file with 7 additions and 7 deletions.
14 changes: 7 additions & 7 deletions kernel/bpf/verifier.c
Original file line number Diff line number Diff line change
Expand Up @@ -5313,13 +5313,13 @@ static int check_cfg(struct bpf_verifier_env *env)
int ret = 0;
int i, t;

insn_state = kcalloc(insn_cnt, sizeof(int), GFP_KERNEL);
insn_state = kvcalloc(insn_cnt, sizeof(int), GFP_KERNEL);
if (!insn_state)
return -ENOMEM;

insn_stack = kcalloc(insn_cnt, sizeof(int), GFP_KERNEL);
insn_stack = kvcalloc(insn_cnt, sizeof(int), GFP_KERNEL);
if (!insn_stack) {
kfree(insn_state);
kvfree(insn_state);
return -ENOMEM;
}

Expand Down Expand Up @@ -5417,8 +5417,8 @@ static int check_cfg(struct bpf_verifier_env *env)
ret = 0; /* cfg looks good */

err_free:
kfree(insn_state);
kfree(insn_stack);
kvfree(insn_state);
kvfree(insn_stack);
return ret;
}

Expand Down Expand Up @@ -7898,7 +7898,7 @@ static void free_states(struct bpf_verifier_env *env)
}
}

kfree(env->explored_states);
kvfree(env->explored_states);
}

static void print_verification_stats(struct bpf_verifier_env *env)
Expand Down Expand Up @@ -7994,7 +7994,7 @@ int bpf_check(struct bpf_prog **prog, union bpf_attr *attr,
goto skip_full_check;
}

env->explored_states = kcalloc(env->prog->len,
env->explored_states = kvcalloc(env->prog->len,
sizeof(struct bpf_verifier_state_list *),
GFP_USER);
ret = -ENOMEM;
Expand Down

0 comments on commit 71dde68

Please sign in to comment.