mbox series

[bpf,v3,0/3] bpf, sockmap complete fixes for avail bytes

Message ID 20230926035300.135096-1-john.fastabend@gmail.com (mailing list archive)
Headers show
Series bpf, sockmap complete fixes for avail bytes | expand

Message

John Fastabend Sept. 26, 2023, 3:52 a.m. UTC
With e5c6de5fa0258 ("bpf, sockmap: Incorrectly handling copied_seq") we
started fixing the available bytes accounting by moving copied_seq to
where the user actually reads the bytes.

However we missed handling MSG_PEEK correctly and we need to ensure
that we don't kfree_skb() a skb off the receive_queue when the
copied_seq number is not incremented by user reads for some time.

v2: drop seq var in tcp_read_skb its no longer necessary per Jakub's
    suggestion
v3: drop tcp_sock as well its also not used anymore. sorry for the extra
    noise there.

John Fastabend (3):
  bpf: tcp_read_skb needs to pop skb regardless of seq
  bpf: sockmap, do not inc copied_seq when PEEK flag set
  bpf: sockmap, add tests for MSG_F_PEEK

 net/ipv4/tcp.c                                | 10 +---
 net/ipv4/tcp_bpf.c                            |  4 +-
 .../selftests/bpf/prog_tests/sockmap_basic.c  | 52 +++++++++++++++++++
 3 files changed, 57 insertions(+), 9 deletions(-)

Comments

Jakub Sitnicki Sept. 29, 2023, 8:02 a.m. UTC | #1
On Mon, Sep 25, 2023 at 08:52 PM -07, John Fastabend wrote:
> With e5c6de5fa0258 ("bpf, sockmap: Incorrectly handling copied_seq") we
> started fixing the available bytes accounting by moving copied_seq to
> where the user actually reads the bytes.
>
> However we missed handling MSG_PEEK correctly and we need to ensure
> that we don't kfree_skb() a skb off the receive_queue when the
> copied_seq number is not incremented by user reads for some time.
>
> v2: drop seq var in tcp_read_skb its no longer necessary per Jakub's
>     suggestion

Credit goes to Simon Horman.

> v3: drop tcp_sock as well its also not used anymore. sorry for the extra
>     noise there.
>
> John Fastabend (3):
>   bpf: tcp_read_skb needs to pop skb regardless of seq
>   bpf: sockmap, do not inc copied_seq when PEEK flag set
>   bpf: sockmap, add tests for MSG_F_PEEK
>
>  net/ipv4/tcp.c                                | 10 +---
>  net/ipv4/tcp_bpf.c                            |  4 +-
>  .../selftests/bpf/prog_tests/sockmap_basic.c  | 52 +++++++++++++++++++
>  3 files changed, 57 insertions(+), 9 deletions(-)

For the series:

Reviewed-by: Jakub Sitnicki <jakub@cloudflare.com>
patchwork-bot+netdevbpf@kernel.org Sept. 29, 2023, 3:10 p.m. UTC | #2
Hello:

This series was applied to bpf/bpf.git (master)
by Daniel Borkmann <daniel@iogearbox.net>:

On Mon, 25 Sep 2023 20:52:57 -0700 you wrote:
> With e5c6de5fa0258 ("bpf, sockmap: Incorrectly handling copied_seq") we
> started fixing the available bytes accounting by moving copied_seq to
> where the user actually reads the bytes.
> 
> However we missed handling MSG_PEEK correctly and we need to ensure
> that we don't kfree_skb() a skb off the receive_queue when the
> copied_seq number is not incremented by user reads for some time.
> 
> [...]

Here is the summary with links:
  - [bpf,v3,1/3] bpf: tcp_read_skb needs to pop skb regardless of seq
    https://git.kernel.org/bpf/bpf/c/9b7177b1df64
  - [bpf,v3,2/3] bpf: sockmap, do not inc copied_seq when PEEK flag set
    https://git.kernel.org/bpf/bpf/c/da9e915eaf5d
  - [bpf,v3,3/3] bpf: sockmap, add tests for MSG_F_PEEK
    https://git.kernel.org/bpf/bpf/c/5f405c0c0c46

You are awesome, thank you!