return 0;
 }
 
+static int nfp_bpf_finalize(struct bpf_verifier_env *env)
+{
+       return 0;
+}
+
 const struct bpf_prog_offload_ops nfp_bpf_analyzer_ops = {
-       .insn_hook = nfp_verify_insn,
+       .insn_hook      = nfp_verify_insn,
+       .finalize       = nfp_bpf_finalize,
 };
 
        return 0;
 }
 
+static int nsim_bpf_finalize(struct bpf_verifier_env *env)
+{
+       return 0;
+}
+
 static const struct bpf_prog_offload_ops nsim_bpf_analyzer_ops = {
-       .insn_hook = nsim_bpf_verify_insn,
+       .insn_hook      = nsim_bpf_verify_insn,
+       .finalize       = nsim_bpf_finalize,
 };
 
 static bool nsim_xdp_offload_active(struct netdevsim *ns)
 
 struct bpf_prog_offload_ops {
        int (*insn_hook)(struct bpf_verifier_env *env,
                         int insn_idx, int prev_insn_idx);
+       int (*finalize)(struct bpf_verifier_env *env);
 };
 
 struct bpf_prog_offload {
 
 int bpf_prog_offload_verifier_prep(struct bpf_verifier_env *env);
 int bpf_prog_offload_verify_insn(struct bpf_verifier_env *env,
                                 int insn_idx, int prev_insn_idx);
+int bpf_prog_offload_finalize(struct bpf_verifier_env *env);
 
 #endif /* _LINUX_BPF_VERIFIER_H */
 
        return ret;
 }
 
+int bpf_prog_offload_finalize(struct bpf_verifier_env *env)
+{
+       struct bpf_prog_offload *offload;
+       int ret = -ENODEV;
+
+       down_read(&bpf_devs_lock);
+       offload = env->prog->aux->offload;
+       if (offload) {
+               if (offload->dev_ops->finalize)
+                       ret = offload->dev_ops->finalize(env);
+               else
+                       ret = 0;
+       }
+       up_read(&bpf_devs_lock);
+
+       return ret;
+}
+
 static void __bpf_prog_offload_destroy(struct bpf_prog *prog)
 {
        struct bpf_prog_offload *offload = prog->aux->offload;
 
                env->cur_state = NULL;
        }
 
+       if (ret == 0 && bpf_prog_is_dev_bound(env->prog->aux))
+               ret = bpf_prog_offload_finalize(env);
+
 skip_full_check:
        while (!pop_stack(env, NULL, NULL));
        free_states(env);