WSL2-Linux-Kernel/kernel/bpf
Stanislav Fomichev d8fe449a9c bpf: Don't return EINVAL from {get,set}sockopt when optlen > PAGE_SIZE
Attaching to these hooks can break iptables because its optval is
usually quite big, or at least bigger than the current PAGE_SIZE limit.
David also mentioned some SCTP options can be big (around 256k).

For such optvals we expose only the first PAGE_SIZE bytes to
the BPF program. BPF program has two options:
1. Set ctx->optlen to 0 to indicate that the BPF's optval
   should be ignored and the kernel should use original userspace
   value.
2. Set ctx->optlen to something that's smaller than the PAGE_SIZE.

v5:
* use ctx->optlen == 0 with trimmed buffer (Alexei Starovoitov)
* update the docs accordingly

v4:
* use temporary buffer to avoid optval == optval_end == NULL;
  this removes the corner case in the verifier that might assume
  non-zero PTR_TO_PACKET/PTR_TO_PACKET_END.

v3:
* don't increase the limit, bypass the argument

v2:
* proper comments formatting (Jakub Kicinski)

Fixes: 0d01da6afc ("bpf: implement getsockopt and setsockopt hooks")
Signed-off-by: Stanislav Fomichev <sdf@google.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Cc: David Laight <David.Laight@ACULAB.COM>
Link: https://lore.kernel.org/bpf/20200617010416.93086-1-sdf@google.com
2020-06-17 10:54:05 -07:00
..
Makefile flow_dissector: Move out netns_bpf prog callbacks 2020-06-01 15:21:02 -07:00
arraymap.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-05-15 13:48:59 -07:00
bpf_iter.c bpf: Enable bpf_iter targets registering ctx argument types 2020-05-13 12:30:50 -07:00
bpf_lru_list.c
bpf_lru_list.h
bpf_lsm.c bpf: Use tracing helpers for lsm programs 2020-06-01 15:08:04 -07:00
bpf_struct_ops.c bpf: Implement CAP_BPF 2020-05-15 17:29:41 +02:00
bpf_struct_ops_types.h
btf.c bpf: Enable bpf_iter targets registering ctx argument types 2020-05-13 12:30:50 -07:00
cgroup.c bpf: Don't return EINVAL from {get,set}sockopt when optlen > PAGE_SIZE 2020-06-17 10:54:05 -07:00
core.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next 2020-06-03 16:27:18 -07:00
cpumap.c xdp: Rename convert_to_xdp_frame in xdp_convert_buff_to_frame 2020-06-01 15:02:53 -07:00
devmap.c devmap: Use bpf_map_area_alloc() for allocating hash buckets 2020-06-17 10:01:19 -07:00
disasm.c
disasm.h
dispatcher.c
hashtab.c bpf: Implement CAP_BPF 2020-05-15 17:29:41 +02:00
helpers.c bpf: Implement BPF ring buffer and verifier support for it 2020-06-01 14:38:22 -07:00
inode.c bpf: Create file bpf iterator 2020-05-09 17:05:26 -07:00
local_storage.c
lpm_trie.c bpf: Implement CAP_BPF 2020-05-15 17:29:41 +02:00
map_in_map.c bpf: Implement CAP_BPF 2020-05-15 17:29:41 +02:00
map_in_map.h
map_iter.c bpf: Enable bpf_iter targets registering ctx argument types 2020-05-13 12:30:50 -07:00
net_namespace.c bpf: Add link-based BPF program attachment to network namespace 2020-06-01 15:21:03 -07:00
offload.c
percpu_freelist.c
percpu_freelist.h
queue_stack_maps.c bpf: Implement CAP_BPF 2020-05-15 17:29:41 +02:00
reuseport_array.c bpf: Implement CAP_BPF 2020-05-15 17:29:41 +02:00
ringbuf.c bpf: Implement BPF ring buffer and verifier support for it 2020-06-01 14:38:22 -07:00
stackmap.c mmap locking API: add mmap_read_trylock_non_owner() 2020-06-09 09:39:14 -07:00
syscall.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-06-13 16:27:13 -07:00
sysfs_btf.c
task_iter.c bpf: Fix bpf_iter's task iterator logic 2020-05-14 18:37:32 -07:00
tnum.c
trampoline.c
verifier.c bpf: Fix an error code in check_btf_func() 2020-06-04 23:38:54 +02:00