diff options
Diffstat (limited to 'kernel/bpf/verifier.c')
-rw-r--r-- | kernel/bpf/verifier.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 1b9496c41383..0e4edd7e3c5f 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c | |||
@@ -7320,7 +7320,12 @@ static int jit_subprogs(struct bpf_verifier_env *env) | |||
7320 | subprog_end = env->subprog_info[i + 1].start; | 7320 | subprog_end = env->subprog_info[i + 1].start; |
7321 | 7321 | ||
7322 | len = subprog_end - subprog_start; | 7322 | len = subprog_end - subprog_start; |
7323 | func[i] = bpf_prog_alloc(bpf_prog_size(len), GFP_USER); | 7323 | /* BPF_PROG_RUN doesn't call subprogs directly, |
7324 | * hence main prog stats include the runtime of subprogs. | ||
7325 | * subprogs don't have IDs and not reachable via prog_get_next_id | ||
7326 | * func[i]->aux->stats will never be accessed and stays NULL | ||
7327 | */ | ||
7328 | func[i] = bpf_prog_alloc_no_stats(bpf_prog_size(len), GFP_USER); | ||
7324 | if (!func[i]) | 7329 | if (!func[i]) |
7325 | goto out_free; | 7330 | goto out_free; |
7326 | memcpy(func[i]->insnsi, &prog->insnsi[subprog_start], | 7331 | memcpy(func[i]->insnsi, &prog->insnsi[subprog_start], |