From: David S. Miller Date: Sun, 2 Aug 2020 08:02:12 +0000 (-0700) Subject: Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=bd0b33b24897ba9ddad221e8ac5b6f0e38a2e004;p=linux.git Merge git://git./linux/kernel/git/netdev/net Resolved kernel/bpf/btf.c using instructions from merge commit 69138b34a7248d2396ab85c8652e20c0c39beaba Signed-off-by: David S. Miller --- bd0b33b24897ba9ddad221e8ac5b6f0e38a2e004 diff --cc kernel/bpf/btf.c index ee36b7f609368,0443600146dc2..4ff0de860ab75 --- a/kernel/bpf/btf.c +++ b/kernel/bpf/btf.c @@@ -4080,14 -4052,98 +4080,14 @@@ error int btf_resolve_helper_id(struct bpf_verifier_log *log, const struct bpf_func_proto *fn, int arg) { - int *btf_id = &fn->btf_id[arg]; - int ret; + int id; -- if (fn->arg_type[arg] != ARG_PTR_TO_BTF_ID) ++ if (fn->arg_type[arg] != ARG_PTR_TO_BTF_ID || !btf_vmlinux) return -EINVAL; - - ret = READ_ONCE(*btf_id); - if (ret) - return ret; - /* ok to race the search. The result is the same */ - ret = __btf_resolve_helper_id(log, fn->func, arg); - if (!ret) { - /* Function argument cannot be type 'void' */ - bpf_log(log, "BTF resolution bug\n"); - return -EFAULT; - } - WRITE_ONCE(*btf_id, ret); - return ret; + id = fn->btf_id[arg]; + if (!id || id > btf_vmlinux->nr_types) + return -EINVAL; + return id; } static int __get_type_size(struct btf *btf, u32 btf_id, diff --cc net/bpfilter/bpfilter_kern.c index f580c3344cb3a,4494ea6056cdb..51a941b56ec3a --- a/net/bpfilter/bpfilter_kern.c +++ b/net/bpfilter/bpfilter_kern.c @@@ -31,20 -33,30 +31,20 @@@ static void __stop_umh(void shutdown_umh(); } -static int __bpfilter_process_sockopt(struct sock *sk, int optname, - char __user *optval, - unsigned int optlen, bool is_set) +static int bpfilter_send_req(struct mbox_request *req) { - struct mbox_request req; struct mbox_reply reply; - loff_t pos; + loff_t pos = 0; ssize_t n; - int ret = -EFAULT; - - req.is_set = is_set; - req.pid = current->pid; - req.cmd = optname; - req.addr = (long __force __user)optval; - req.len = optlen; - if (!bpfilter_ops.info.pid) - goto out; - n = kernel_write(bpfilter_ops.info.pipe_to_umh, &req, sizeof(req), + + if (!bpfilter_ops.info.tgid) + return -EFAULT; + pos = 0; + n = kernel_write(bpfilter_ops.info.pipe_to_umh, req, sizeof(*req), &pos); - if (n != sizeof(req)) { + if (n != sizeof(*req)) { pr_err("write fail %zd\n", n); - __stop_umh(); - ret = -EFAULT; - goto out; + goto stop; } pos = 0; n = kernel_read(bpfilter_ops.info.pipe_from_umh, &reply, sizeof(reply), diff --cc tools/testing/selftests/net/rxtimestamp.c index 221fdece47d45,bcb79ba1f2143..e4613ce4ed693 --- a/tools/testing/selftests/net/rxtimestamp.c +++ b/tools/testing/selftests/net/rxtimestamp.c @@@ -354,13 -327,9 +354,12 @@@ int main(int argc, char **argv { bool all_protocols = true; bool all_tests = true; + bool cfg_ipv4 = false; + bool cfg_ipv6 = false; + bool strict = false; int arg_index = 0; int failures = 0; - int s, t; - char opt; + int s, t, opt; while ((opt = getopt_long(argc, argv, "", long_options, &arg_index)) != -1) {