From: John Fastabend <john.fastabend@gmail.com>
To: Jakub Sitnicki <jakub@cloudflare.com>,
Cong Wang <xiyou.wangcong@gmail.com>,
wangyufen <wangyufen@huawei.com>
Cc: ast@kernel.org, john.fastabend@gmail.com, andrii@kernel.org,
daniel@iogearbox.net, lmb@cloudflare.com, davem@davemloft.net,
kafai@fb.com, dsahern@kernel.org, kuba@kernel.org,
songliubraving@fb.com, yhs@fb.com, kpsingh@kernel.org,
netdev@vger.kernel.org, bpf@vger.kernel.org
Subject: Re: [PATCH bpf-next] bpf,sockmap: fix sk->sk_forward_alloc warn_on in sk_stream_kill_queues
Date: Tue, 31 May 2022 16:40:04 -0700 [thread overview]
Message-ID: <6296a754d3f2b_2cd1a208d4@john.notmuch> (raw)
In-Reply-To: <878rqjm0ov.fsf@cloudflare.com>
Jakub Sitnicki wrote:
> On Sat, May 28, 2022 at 09:54 AM +08, wangyufen wrote:
> > 在 2022/5/28 5:37, Cong Wang 写道:
> >> On Tue, May 24, 2022 at 03:53:11PM +0800, Wang Yufen wrote:
> >>> During TCP sockmap redirect pressure test, the following warning is triggered:
> >>> WARNING: CPU: 3 PID: 2145 at net/core/stream.c:205 sk_stream_kill_queues+0xbc/0xd0
> >>> CPU: 3 PID: 2145 Comm: iperf Kdump: loaded Tainted: G W 5.10.0+ #9
> >>> Call Trace:
> >>> inet_csk_destroy_sock+0x55/0x110
> >>> inet_csk_listen_stop+0xbb/0x380
> >>> tcp_close+0x41b/0x480
> >>> inet_release+0x42/0x80
> >>> __sock_release+0x3d/0xa0
> >>> sock_close+0x11/0x20
> >>> __fput+0x9d/0x240
> >>> task_work_run+0x62/0x90
> >>> exit_to_user_mode_prepare+0x110/0x120
> >>> syscall_exit_to_user_mode+0x27/0x190
> >>> entry_SYSCALL_64_after_hwframe+0x44/0xa9
> >>>
> >>> The reason we observed is that:
> >>> When the listener is closing, a connection may have completed the three-way
> >>> handshake but not accepted, and the client has sent some packets. The child
> >>> sks in accept queue release by inet_child_forget()->inet_csk_destroy_sock(),
> >>> but psocks of child sks have not released.
> >>>
> >> Hm, in this scenario, how does the child socket end up in the sockmap?
> >> Clearly user-space does not have a chance to get an fd yet.
> >>
> >> And, how does your patch work? Since the child sock does not even inheirt
> >> the sock proto after clone (see the comments above tcp_bpf_clone()) at
> >> all?
> >>
> >> Thanks.
> >> .
> > My test cases are as follows:
> >
> > __section("sockops")
> > int bpf_sockmap(struct bpf_sock_ops *skops)
> > {
> > switch (skops->op) {
> > case BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB:
> > case BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB:
> > ...
> > bpf_sock_hash_update(skops, &sock_ops_map, &key, BPF_NOEXIST);
> > break;
> > ...
> > }
>
> Right, when processing the final ACK in tcp_rcv_state_process(), we
> invoke the BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB BPF callback.
>
> This gives a chance to install sockmap sk_prot callbacks.
>
> An accept() without ever calling accept() ;-)
>
> [...]
LGTM as well.
Acked-by: John Fastabend <john.fastabend@gmail.com>
next prev parent reply other threads:[~2022-05-31 23:40 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-24 7:53 [PATCH bpf-next] bpf,sockmap: fix sk->sk_forward_alloc warn_on in sk_stream_kill_queues Wang Yufen
2022-05-25 8:41 ` Jakub Sitnicki
2022-05-27 21:37 ` Cong Wang
2022-05-28 1:54 ` wangyufen
2022-05-30 16:37 ` Jakub Sitnicki
2022-05-31 23:40 ` John Fastabend [this message]
2022-05-31 23:50 ` patchwork-bot+netdevbpf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6296a754d3f2b_2cd1a208d4@john.notmuch \
--to=john.fastabend@gmail.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=jakub@cloudflare.com \
--cc=kafai@fb.com \
--cc=kpsingh@kernel.org \
--cc=kuba@kernel.org \
--cc=lmb@cloudflare.com \
--cc=netdev@vger.kernel.org \
--cc=songliubraving@fb.com \
--cc=wangyufen@huawei.com \
--cc=xiyou.wangcong@gmail.com \
--cc=yhs@fb.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.