Messages in this thread | | | Date | Mon, 26 Oct 2015 20:26:30 -0700 | From | Alexei Starovoitov <> | Subject | Re: [net-next PATCHv2] bpf: Output error message to logbuf when loading failure |
| |
On Mon, Oct 26, 2015 at 07:13:08AM +0000, Wang Nan wrote: > Many reasons can make bpf_prog_load() return EINVAL. This patch utilizes > logbuf to deliver the actual reason of the failure. > > Without this patch, it is very easy for user to pass an object with > "version" section not match the kernel version code, and the problem > is hard to determine from return code (EINVAL). > > Signed-off-by: Wang Nan <wangnan0@huawei.com> > Cc: Alexei Starovoitov <ast@kernel.org> > Cc: Arnaldo Carvalho de Melo <acme@redhat.com> > Cc: David S. Miller <davem@davemloft.net> > Cc: Wu Fengguang <fengguang.wu@intel.com>
NACK for both implementation and design.
> + /* Don't need care the copying result too much */ > + WARN(copy_to_user(log_ubuf, log_buf, log_size), > + KERN_WARNING "Failed to copy BPF error note '%s' to log buffer\n", > + log_buf);
unprivilged user will be spamming kernel logs?!
> - if (attr->insn_cnt >= BPF_MAXINSNS) > + if (attr->insn_cnt >= BPF_MAXINSNS) { > + bpf_prog_load_note(attr, "Too many instructions: %d > %d\n", > + attr->insn_cnt, BPF_MAXINSNS); > return -EINVAL;
if user space did that, it's wrong and can detect it on its own.
> if (type == BPF_PROG_TYPE_KPROBE && > - attr->kern_version != LINUX_VERSION_CODE) > + attr->kern_version != LINUX_VERSION_CODE) { > + bpf_prog_load_note(attr, > + "Kernel version mismatch: 0x%x != 0x%x\n", > + attr->kern_version, LINUX_VERSION_CODE); > return -EINVAL;
user space (perf) could have checked that on its own without kernel changes.
> /* find program type: socket_filter vs tracing_filter */ > err = find_prog_type(type, prog); > - if (err < 0) > + if (err < 0) { > + bpf_prog_load_note(attr, "Invalid program type: %d\n", type); > goto free_prog;
same here.
In general syscalls muxing different error conditions into EINVAL is a kernel wide problem and should be solved for all.
| |