The codes in bpf_setsockopt() is mostly a copy-and-paste from the sock_setsockopt(), do_tcp_setsockopt(), do_ipv6_setsockopt(), and do_ip_setsockopt(). As the allowed optnames in bpf_setsockopt() grows, so are the duplicated codes. The codes between the copies also slowly drifted. This set is an effort to clean this up and reuse the existing {sock,do_tcp,do_ipv6,do_ip}_setsockopt() as much as possible. After the clean up, this set also adds a few allowed optnames that we need to the bpf_setsockopt(). The initial attempt was to clean up both bpf_setsockopt() and bpf_getsockopt() together. However, the patch set was getting too long. It is beneficial to leave the bpf_getsockopt() out for another patch set. Thus, this set is focusing on the bpf_setsockopt(). Martin KaFai Lau (14): net: Change sock_setsockopt from taking sock ptr to sk ptr bpf: net: Avoid sock_setsockopt() taking sk lock when called from bpf bpf: net: Consider optval.is_bpf before capable check in sock_setsockopt() bpf: net: Avoid do_tcp_setsockopt() taking sk lock when called from bpf bpf: net: Avoid do_ip_setsockopt() taking sk lock when called from bpf bpf: net: Avoid do_ipv6_setsockopt() taking sk lock when called from bpf bpf: Embed kernel CONFIG check into the if statement in bpf_setsockopt bpf: Change bpf_setsockopt(SOL_SOCKET) to reuse sock_setsockopt() bpf: Refactor bpf specific tcp optnames to a new function bpf: Change bpf_setsockopt(SOL_TCP) to reuse do_tcp_setsockopt() bpf: Change bpf_setsockopt(SOL_IP) to reuse do_ip_setsockopt() bpf: Change bpf_setsockopt(SOL_IPV6) to reuse do_ipv6_setsockopt() bpf: Add a few optnames to bpf_setsockopt selftests/bpf: bpf_setsockopt tests drivers/nvme/host/tcp.c | 2 +- fs/ksmbd/transport_tcp.c | 2 +- include/linux/sockptr.h | 8 +- include/net/ip.h | 2 + include/net/ipv6.h | 2 + include/net/ipv6_stubs.h | 2 + include/net/sock.h | 14 +- include/net/tcp.h | 2 + net/core/filter.c | 378 +++++------- net/core/sock.c | 25 +- net/ipv4/ip_sockglue.c | 10 +- net/ipv4/tcp.c | 21 +- net/ipv6/af_inet6.c | 1 + net/ipv6/ipv6_sockglue.c | 10 +- net/mptcp/sockopt.c | 12 +- net/socket.c | 2 +- .../selftests/bpf/prog_tests/setget_sockopt.c | 125 ++++ .../selftests/bpf/progs/setget_sockopt.c | 538 ++++++++++++++++++ 18 files changed, 890 insertions(+), 266 deletions(-) create mode 100644 tools/testing/selftests/bpf/prog_tests/setget_sockopt.c create mode 100644 tools/testing/selftests/bpf/progs/setget_sockopt.c -- 2.30.2