All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH bpf v7 0/5] bpf: fix wrong copied_seq calculation and add tests
@ 2025-01-16 14:05 Jiayuan Chen
  2025-01-16 14:05 ` [PATCH bpf v7 1/5] strparser: add read_sock callback Jiayuan Chen
                   ` (4 more replies)
  0 siblings, 5 replies; 13+ messages in thread
From: Jiayuan Chen @ 2025-01-16 14:05 UTC (permalink / raw)
  To: bpf, jakub, john.fastabend
  Cc: netdev, martin.lau, ast, edumazet, davem, dsahern, kuba, pabeni,
	linux-kernel, song, andrii, mhal, yonghong.song, daniel,
	xiyou.wangcong, horms, corbet, eddyz87, cong.wang, shuah, mykolal,
	jolsa, haoluo, sdf, kpsingh, linux-doc, Jiayuan Chen

A previous commit described in this topic
http://lore.kernel.org/bpf/20230523025618.113937-9-john.fastabend@gmail.com
directly updated 'sk->copied_seq' in the tcp_eat_skb() function when the
action of a BPF program was SK_REDIRECT. For other actions, like SK_PASS,
the update logic for 'sk->copied_seq' was moved to
tcp_bpf_recvmsg_parser() to ensure the accuracy of the 'fionread' feature.

That commit works for a single stream_verdict scenario, as it also
modified 'sk_data_ready->sk_psock_verdict_data_ready->tcp_read_skb'
to remove updating 'sk->copied_seq'.

However, for programs where both stream_parser and stream_verdict are
active(strparser purpose), tcp_read_sock() was used instead of
tcp_read_skb() (sk_data_ready->strp_data_ready->tcp_read_sock)
tcp_read_sock() now still update 'sk->copied_seq', leading to duplicated
updates.

In summary, for strparser + SK_PASS, copied_seq is redundantly calculated
in both tcp_read_sock() and tcp_bpf_recvmsg_parser().

The issue causes incorrect copied_seq calculations, which prevent
correct data reads from the recv() interface in user-land.

Also we added test cases for bpf + strparser and separated them from
sockmap_basic, as strparser has more encapsulation and parsing
capabilities compared to sockmap.

Fixes: e5c6de5fa025 ("bpf, sockmap: Incorrectly handling copied_seq")

---
V3 -> V7:
https://lore.kernel.org/bpf/20250109094402.50838-1-mrpre@163.com/
https://lore.kernel.org/bpf/20241218053408.437295-1-mrpre@163.com/
Avoid introducing new proto_ops. (Jakub Sitnicki).
Add more edge test cases for strparser + bpf.
Fix patchwork fail of test cases code.
Fix psock fetch without rcu lock.
Move code of modifying to tcp_bpf.c.

V1 -> V3:
https://lore.kernel.org/bpf/20241209152740.281125-1-mrpre@163.com/
Fix patchwork fail by adding Fixes tag.
Save skb data offset for ENOMEM. (John Fastabend)

Jiayuan Chen (5):
  strparser: add read_sock callback
  bpf: fix wrong copied_seq calculation
  bpf: disable non stream socket for strparser
  selftests/bpf: fix invalid flag of recv()
  selftests/bpf: add strparser test for bpf

 Documentation/networking/strparser.rst        |  11 +-
 include/linux/skmsg.h                         |   4 +
 include/net/strparser.h                       |   2 +
 include/net/tcp.h                             |   3 +
 net/core/skmsg.c                              |  23 +
 net/core/sock_map.c                           |  13 +-
 net/ipv4/tcp.c                                |  29 +-
 net/ipv4/tcp_bpf.c                            |  47 ++
 net/strparser/strparser.c                     |  11 +-
 .../selftests/bpf/prog_tests/sockmap_basic.c  |  59 +--
 .../selftests/bpf/prog_tests/sockmap_strp.c   | 452 ++++++++++++++++++
 .../selftests/bpf/progs/test_sockmap_strp.c   |  53 ++
 12 files changed, 642 insertions(+), 65 deletions(-)
 create mode 100644 tools/testing/selftests/bpf/prog_tests/sockmap_strp.c
 create mode 100644 tools/testing/selftests/bpf/progs/test_sockmap_strp.c

-- 
2.43.5


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2025-01-20 10:13 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-16 14:05 [PATCH bpf v7 0/5] bpf: fix wrong copied_seq calculation and add tests Jiayuan Chen
2025-01-16 14:05 ` [PATCH bpf v7 1/5] strparser: add read_sock callback Jiayuan Chen
2025-01-18 14:56   ` Jakub Sitnicki
2025-01-16 14:05 ` [PATCH bpf v7 2/5] bpf: fix wrong copied_seq calculation Jiayuan Chen
2025-01-18 14:50   ` Jakub Sitnicki
2025-01-18 15:29     ` Jiayuan Chen
2025-01-20  3:35       ` Jiayuan Chen
2025-01-20 10:13         ` Jakub Sitnicki
2025-01-16 14:05 ` [PATCH bpf v7 3/5] bpf: disable non stream socket for strparser Jiayuan Chen
2025-01-18 15:03   ` Jakub Sitnicki
2025-01-18 15:32     ` Jiayuan Chen
2025-01-16 14:05 ` [PATCH bpf v7 4/5] selftests/bpf: fix invalid flag of recv() Jiayuan Chen
2025-01-16 14:05 ` [PATCH bpf v7 5/5] selftests/bpf: add strparser test for bpf Jiayuan Chen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.