aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/bpf
diff options
context:
space:
mode:
authorAlexei Starovoitov <ast@kernel.org>2019-04-02 00:27:43 -0400
committerDaniel Borkmann <daniel@iogearbox.net>2019-04-03 19:27:38 -0400
commit71dde681a8cea1ccff2c7b3be83c043ab6b2a977 (patch)
treeaa61a0ecaa19dd6476634403f595c80b2c0a1ca5 /kernel/bpf
parent25af32dad8047d180e70e233c85b909dd6587cc5 (diff)
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: Alexei Starovoitov <ast@kernel.org> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to 'kernel/bpf')
-rw-r--r--kernel/bpf/verifier.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index 94cf6efc5df6..ad3494a881da 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -5313,13 +5313,13 @@ static int check_cfg(struct bpf_verifier_env *env)
5313 int ret = 0; 5313 int ret = 0;
5314 int i, t; 5314 int i, t;
5315 5315
5316 insn_state = kcalloc(insn_cnt, sizeof(int), GFP_KERNEL); 5316 insn_state = kvcalloc(insn_cnt, sizeof(int), GFP_KERNEL);
5317 if (!insn_state) 5317 if (!insn_state)
5318 return -ENOMEM; 5318 return -ENOMEM;
5319 5319
5320 insn_stack = kcalloc(insn_cnt, sizeof(int), GFP_KERNEL); 5320 insn_stack = kvcalloc(insn_cnt, sizeof(int), GFP_KERNEL);
5321 if (!insn_stack) { 5321 if (!insn_stack) {
5322 kfree(insn_state); 5322 kvfree(insn_state);
5323 return -ENOMEM; 5323 return -ENOMEM;
5324 } 5324 }
5325 5325
@@ -5417,8 +5417,8 @@ check_state:
5417 ret = 0; /* cfg looks good */ 5417 ret = 0; /* cfg looks good */
5418 5418
5419err_free: 5419err_free:
5420 kfree(insn_state); 5420 kvfree(insn_state);
5421 kfree(insn_stack); 5421 kvfree(insn_stack);
5422 return ret; 5422 return ret;
5423} 5423}
5424 5424
@@ -7898,7 +7898,7 @@ static void free_states(struct bpf_verifier_env *env)
7898 } 7898 }
7899 } 7899 }
7900 7900
7901 kfree(env->explored_states); 7901 kvfree(env->explored_states);
7902} 7902}
7903 7903
7904static void print_verification_stats(struct bpf_verifier_env *env) 7904static 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 goto skip_full_check; 7994 goto skip_full_check;
7995 } 7995 }
7996 7996
7997 env->explored_states = kcalloc(env->prog->len, 7997 env->explored_states = kvcalloc(env->prog->len,
7998 sizeof(struct bpf_verifier_state_list *), 7998 sizeof(struct bpf_verifier_state_list *),
7999 GFP_USER); 7999 GFP_USER);
8000 ret = -ENOMEM; 8000 ret = -ENOMEM;