Subject: Re: [PATCH v2 3/5] ebpf: add a way to dump an eBPF program

From: Daniel Borkmann <[email-masked]>
Date: Fri, 11 Sep 2015 15:39:14 +0200

On 09/11/2015 02:21 AM, Tycho Andersen wrote:
> This commit adds a way to dump eBPF programs. The initial implementation
> doesn't support maps, and therefore only allows dumping seccomp ebpf
> programs which themselves don't currently support maps.
>
> v2: don't export a prog_id for the filter
>
> Signed-off-by: Tycho Andersen <[email-masked]>
> CC: Kees Cook <[email-masked]>
> CC: Will Drewry <[email-masked]>
> CC: Oleg Nesterov <[email-masked]>
> CC: Andy Lutomirski <[email-masked]>
> CC: Pavel Emelyanov <[email-masked]>
> CC: Serge E. Hallyn <serge.hallyn-GeWIH/[email-masked]>
> CC: Alexei Starovoitov <[email-masked]>
> CC: Daniel Borkmann <[email-masked]>
[...]
> diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
> index dc9b464..58ae9f4 100644
> --- a/kernel/bpf/syscall.c
> +++ b/kernel/bpf/syscall.c
> @@ -586,6 +586,44 @@ free_prog:
>   	return err;
>   }
>
> +static int bpf_prog_dump(union bpf_attr *attr, union bpf_attr __user *uattr)
> +{
> +	int ufd = attr->prog_fd;
> +	struct fd f = fdget(ufd);
> +	struct bpf_prog *prog;
> +	int ret = -EINVAL;
> +
> +	prog = get_prog(f);
> +	if (IS_ERR(prog))
> +		return PTR_ERR(prog);
> +
> +	/* For now, let's refuse to dump anything that isn't a seccomp program.
> +	 * Other program types have support for maps, which our current dump
> +	 * code doesn't support.
> +	 */
> +	if (prog->type != BPF_PROG_TYPE_SECCOMP)
> +		goto out;

Yep, also when you start adding helper calls (next to map objects) you'd
need to undo kernel pointers that the verifier sets here.