Commit 71dde681 authored by Alexei Starovoitov's avatar Alexei Starovoitov Committed by Daniel Borkmann

bpf: convert temp arrays to kvcalloc

Temporary arrays used during program verification need to be vmalloc-ed
to support large bpf programs.
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
parent 25af32da
...@@ -5313,13 +5313,13 @@ static int check_cfg(struct bpf_verifier_env *env) ...@@ -5313,13 +5313,13 @@ static int check_cfg(struct bpf_verifier_env *env)
int ret = 0; int ret = 0;
int i, t; int i, t;
insn_state = kcalloc(insn_cnt, sizeof(int), GFP_KERNEL); insn_state = kvcalloc(insn_cnt, sizeof(int), GFP_KERNEL);
if (!insn_state) if (!insn_state)
return -ENOMEM; return -ENOMEM;
insn_stack = kcalloc(insn_cnt, sizeof(int), GFP_KERNEL); insn_stack = kvcalloc(insn_cnt, sizeof(int), GFP_KERNEL);
if (!insn_stack) { if (!insn_stack) {
kfree(insn_state); kvfree(insn_state);
return -ENOMEM; return -ENOMEM;
} }
...@@ -5417,8 +5417,8 @@ static int check_cfg(struct bpf_verifier_env *env) ...@@ -5417,8 +5417,8 @@ static int check_cfg(struct bpf_verifier_env *env)
ret = 0; /* cfg looks good */ ret = 0; /* cfg looks good */
err_free: err_free:
kfree(insn_state); kvfree(insn_state);
kfree(insn_stack); kvfree(insn_stack);
return ret; return ret;
} }
...@@ -7898,7 +7898,7 @@ static void free_states(struct bpf_verifier_env *env) ...@@ -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) static void print_verification_stats(struct bpf_verifier_env *env)
...@@ -7994,7 +7994,7 @@ int bpf_check(struct bpf_prog **prog, union bpf_attr *attr, ...@@ -7994,7 +7994,7 @@ int bpf_check(struct bpf_prog **prog, union bpf_attr *attr,
goto skip_full_check; goto skip_full_check;
} }
env->explored_states = kcalloc(env->prog->len, env->explored_states = kvcalloc(env->prog->len,
sizeof(struct bpf_verifier_state_list *), sizeof(struct bpf_verifier_state_list *),
GFP_USER); GFP_USER);
ret = -ENOMEM; ret = -ENOMEM;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment