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 | } |
