diff options
Diffstat (limited to 'kernel/bpf/syscall.c')
-rw-r--r-- | kernel/bpf/syscall.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index e2e1c78ce1dc..30e728dcd35d 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c | |||
@@ -937,10 +937,16 @@ static void __bpf_prog_put_rcu(struct rcu_head *rcu) | |||
937 | static void __bpf_prog_put(struct bpf_prog *prog, bool do_idr_lock) | 937 | static void __bpf_prog_put(struct bpf_prog *prog, bool do_idr_lock) |
938 | { | 938 | { |
939 | if (atomic_dec_and_test(&prog->aux->refcnt)) { | 939 | if (atomic_dec_and_test(&prog->aux->refcnt)) { |
940 | int i; | ||
941 | |||
940 | trace_bpf_prog_put_rcu(prog); | 942 | trace_bpf_prog_put_rcu(prog); |
941 | /* bpf_prog_free_id() must be called first */ | 943 | /* bpf_prog_free_id() must be called first */ |
942 | bpf_prog_free_id(prog, do_idr_lock); | 944 | bpf_prog_free_id(prog, do_idr_lock); |
945 | |||
946 | for (i = 0; i < prog->aux->func_cnt; i++) | ||
947 | bpf_prog_kallsyms_del(prog->aux->func[i]); | ||
943 | bpf_prog_kallsyms_del(prog); | 948 | bpf_prog_kallsyms_del(prog); |
949 | |||
944 | call_rcu(&prog->aux->rcu, __bpf_prog_put_rcu); | 950 | call_rcu(&prog->aux->rcu, __bpf_prog_put_rcu); |
945 | } | 951 | } |
946 | } | 952 | } |