On Tue, Jun 23, 2020 at 12:34:58PM +0200, Jakub Sitnicki wrote:
[ ... ]
> @@ -93,8 +108,16 @@ static int bpf_netns_link_update_prog(struct bpf_link
> *link,
> goto out_unlock;
> }
>
> + run_array = rcu_dereference_protected(net->bpf.run_array[type],
> +
> lockdep_is_held(&netns_bpf_mutex));
> + if (run_array)
> + ret = bpf_prog_array_replace_item(run_array, link->prog,
> new_prog);
> + else
When will this happen?
> + ret = -ENOENT;
> + if (ret)
> + goto out_unlock;
> +
> old_prog = xchg(&link->prog, new_prog);
> - rcu_assign_pointer(net->bpf.progs[type], new_prog);
> bpf_prog_put(old_prog);
>
> out_unlock:
> @@ -142,14 +165,38 @@ static const struct bpf_link_ops bpf_netns_link_ops = {
> .show_fdinfo = bpf_netns_link_show_fdinfo,
> };