From: Xuanqiang Luo <xuanqiang.luo@linux.dev>
To: Kuniyuki Iwashima <kuniyu@google.com>
Cc: Simon Horman <horms@kernel.org>,
Kuniyuki Iwashima <kuni1840@gmail.com>,
netdev@vger.kernel.org, Taras Madan <tarasmadan@google.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Neal Cardwell <ncardwell@google.com>
Subject: Re: [PATCH v1 net] tcp: Don't call skb_clone_and_charge_r() for close()d listener in tcp_v6_do_rcv().
Date: Mon, 14 Sep 2026 16:53:00 +0800 [thread overview]
Message-ID: <afba7d6a-a1b9-4c55-b3b0-3f034e92a4c3@linux.dev> (raw)
In-Reply-To: <20260914011420.115556-1-kuniyu@google.com>
在 2026/9/14 09:14, Kuniyuki Iwashima 写道:
> tcp_v6_do_rcv() no longer calls skb_clone_and_charge_r() for
> TCP_LISTEN since commit 073d89808c06 ("net: fix data-races around
> sk->sk_forward_alloc").
>
> However, there is still a small race window between tcp_v6_rcv()
> and tcp_v6_do_rcv(), where concurrent close() changes TCP_LISTEN
> to TCP_CLOSE, causing skb_clone_and_charge_r() to be called
> locklessly and resulting in the splat below. [0]
>
> Let's avoid calling skb_clone_and_charge_r() for TCP_CLOSE as well.
>
> This is fine for non-listeners because tcp_rcv_state_process()
> drops skb for TCP_CLOSE and opt_skb was freed immediately anyway.
>
> [0]:
> sk->sk_forward_alloc
> WARNING: net/ipv4/af_inet.c:162 at inet_sock_destruct+0x64d/0x810 net/ipv4/af_inet.c:162, CPU#1: ksoftirqd/1/28
> Modules linked in:
> CPU: 1 UID: 0 PID: 28 Comm: ksoftirqd/1 Not tainted 7.2.0 #17 PREEMPT(full)
> Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.17.0-debian-1.17.0-1 04/01/2014
> RIP: 0010:inet_sock_destruct+0x64d/0x810 net/ipv4/af_inet.c:162
> Code: 3d 49 ff e9 06 fd ff ff e8 d0 5b 83 f8 90 0f 0b 90 e9 35 fe ff ff e8 c2 5b 83 f8 90 0f 0b 90 e9 c5 fe ff ff e8 b4 5b 83 f8 90 <0f> 0b 90 e9 04 ff ff ff e8 a6 5b 83 f8 90 0f 0b 90 e9 65 fe ff ff
> RSP: 0018:ffffc90000677bb8 EFLAGS: 00010246
> RAX: 0000000000000000 RBX: ffff8880117bde80 RCX: ffffffff8957eb41
> RDX: ffff88801dad5d00 RSI: ffffffff8957ec3c RDI: 0000000000000005
> RBP: 00000000fffff000 R08: ffffffff8957eb41 R09: 00000000fffff000
> R10: 0000000000000005 R11: 0000000000000000 R12: dffffc0000000000
> R13: ffff8880117bdf10 R14: ffffffff81c08eb7 R15: 0000000000000003
> FS: 0000000000000000(0000) GS:ffff8880d7ae5000(0000) knlGS:0000000000000000
> CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> CR2: 00007f93a1021138 CR3: 00000000207a9000 CR4: 0000000000350ef0
> Call Trace:
> <TASK>
> __sk_destruct+0x82/0xae0 net/core/sock.c:2356
> rcu_do_batch kernel/rcu/tree.c:2645 [inline]
> rcu_core+0x59c/0x1100 kernel/rcu/tree.c:2897
> handle_softirqs+0x1e4/0x9b0 kernel/softirq.c:622
> run_ksoftirqd kernel/softirq.c:1076 [inline]
> run_ksoftirqd+0x38/0x60 kernel/softirq.c:1068
> smpboot_thread_fn+0x458/0xc80 kernel/smpboot.c:160
> kthread+0x396/0x4a0 kernel/kthread.c:436
> ret_from_fork+0x8e0/0xe40 arch/x86/kernel/process.c:158
> ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245
> </TASK>
>
> Fixes: e994b2f0fb92 ("tcp: do not lock listener to process SYN packets")
> Reported-by: Taras Madan <tarasmadan@google.com>
> Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
Reviewed-by: Xuanqiang Luo <luoxuanqiang@kylinos.cn>
Thanks,
next prev parent reply other threads:[~2026-09-14 8:53 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-14 1:14 [PATCH v1 net] tcp: Don't call skb_clone_and_charge_r() for close()d listener in tcp_v6_do_rcv() Kuniyuki Iwashima
2026-09-14 8:53 ` Xuanqiang Luo [this message]
2026-09-14 10:30 ` Eric Dumazet
2026-09-15 1:15 ` netdev-bot+sashiko
2026-09-15 4:38 ` Kuniyuki Iwashima
2026-09-15 13:13 ` Paolo Abeni
2026-09-15 13:20 ` 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=afba7d6a-a1b9-4c55-b3b0-3f034e92a4c3@linux.dev \
--to=xuanqiang.luo@linux.dev \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=kuni1840@gmail.com \
--cc=kuniyu@google.com \
--cc=ncardwell@google.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=tarasmadan@google.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.