]> git.ipfire.org Git - thirdparty/linux.git/commit
tcp: fix TFO max_qlen accounting across reuseport migration
authorJiayuan Chen <jiayuan.chen@linux.dev>
Mon, 3 Aug 2026 06:17:38 +0000 (14:17 +0800)
committerJakub Kicinski <kuba@kernel.org>
Thu, 6 Aug 2026 00:10:28 +0000 (17:10 -0700)
commita0ab2ba83e35159d81cec830a92e885ecf8139be
treefeb68a2b3c1e280a7445306f8ffb88fe7e14f1a0
parent9113e98eb7e353a70428c24e4e4765ba8279ce20
tcp: fix TFO max_qlen accounting across reuseport migration

A listener's TCP_FASTOPEN max_qlen stops being accurate and lets through
far more pending Fast Open requests than it was configured for.

This only shows up with SO_REUSEPORT listener migration, where closing a
listener hands its still-pending TFO children over to a surviving one.

fastopenq.qlen is charged in tcp_fastopen_create_child() when the child
is created and uncharged in reqsk_fastopen_remove() when the handshake
completes.  The uncharge follows rsk_listener of the request the child
points at, and inet_reqsk_clone() has repointed the child at a new
request owned by the new listener, so the ++ and the -- land on two
different sockets.  The new listener's qlen drifts negative and its
limit no longer binds.

Charge the new listener during migration, like reqsk_queue_migrated()
already does for queue->young and queue->qlen.

Fixes: 54b92e841937 ("tcp: Migrate TCP_ESTABLISHED/TCP_SYN_RECV sockets in accept queues.")
Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev>
Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20260803061739.134737-1-jiayuan.chen@linux.dev
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ipv4/inet_connection_sock.c