I noticed that if the verdict callback returns SK_PASS, using splice(2) to read from a socket in a sockmap does not work since it never sees the data queued on to it. As far as I can see, this is not a regression but just something that has never worked, but it does make sockmap unusable if you can't guarantee that the programs using the socket will not use splice(2). This series attempts to fix it and add a test for it. --- Changes in v3: - Rebase on latest bpf-next/master - Link to v2: https://lore.kernel.org/r/20250609-sockmap-splice-v2-0-9c50645cfa32@xxxxxxxxxxxxx Changes in v2: - Rebase on latest bpf-next/master - Remove unnecessary change in inet_dgram_ops - Remove ->splice_read NULL check in inet_splice_read() - Use INDIRECT_CALL_1() in inet_splice_read() - Include test case in default test suite in test_sockmap - Link to v1: https://lore.kernel.org/r/20240606-sockmap-splice-v1-0-4820a2ab14b5@xxxxxxxxxxxxx --- Vincent Whitchurch (5): net: Add splice_read to prot tcp_bpf: Fix reading with splice(2) selftests/bpf: sockmap: Exit with error on failure selftests/bpf: sockmap: Allow SK_PASS in verdict selftests/bpf: sockmap: Add splice + SK_PASS regression test include/net/inet_common.h | 3 + include/net/sock.h | 3 + net/ipv4/af_inet.c | 13 ++++- net/ipv4/tcp_bpf.c | 9 +++ net/ipv4/tcp_ipv4.c | 1 + net/ipv6/af_inet6.c | 2 +- net/ipv6/tcp_ipv6.c | 1 + tools/testing/selftests/bpf/test_sockmap.c | 90 +++++++++++++++++++++++++++++- 8 files changed, 118 insertions(+), 4 deletions(-) --- base-commit: ad97cb2ed06a6ba9025fd8bd14fa24369550cbb5 change-id: 20240606-sockmap-splice-d371ac07d7b4 Best regards, -- Vincent Whitchurch <vincent.whitchurch@xxxxxxxxxxxxx>