diff options
Diffstat (limited to 'kernel/bpf/core.c')
| -rw-r--r-- | kernel/bpf/core.c | 8 | 
1 files changed, 7 insertions, 1 deletions
| diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c index 034ad93a1ad7..9b1577498373 100644 --- a/kernel/bpf/core.c +++ b/kernel/bpf/core.c @@ -2236,8 +2236,14 @@ static void bpf_prog_free_deferred(struct work_struct *work)  #endif  	if (aux->dst_trampoline)  		bpf_trampoline_put(aux->dst_trampoline); -	for (i = 0; i < aux->func_cnt; i++) +	for (i = 0; i < aux->func_cnt; i++) { +		/* We can just unlink the subprog poke descriptor table as +		 * it was originally linked to the main program and is also +		 * released along with it. +		 */ +		aux->func[i]->aux->poke_tab = NULL;  		bpf_jit_free(aux->func[i]); +	}  	if (aux->func_cnt) {  		kfree(aux->func);  		bpf_prog_unlock_free(aux->prog); |