Re: [PATCH net-next v12 6/6] tls: Flush backlog before waiting for a new record

Sabrina Dubroca <[email protected]> Mon, 8 Jun 2026 00:10:51 +0200
Newsgroups dev.linux.lists.kernel-tls-handshake,org.kernel.vger.netdev
Message-ID <aiXsa5zx3u0DUn0l@krikkit>
2026-06-04, 13:48:29 -0400, Chuck Lever wrote:
> From: Chuck Lever <[email protected]>
> 
> While lock_sock is held, incoming TCP segments land on
> sk->sk_backlog rather than sk->sk_receive_queue.
> tls_rx_rec_wait() inspects only sk_receive_queue, so backlog
> data remains invisible. For non-blocking callers (read_sock,
> and recvmsg or splice_read with MSG_DONTWAIT) this causes a
> spurious -EAGAIN. For blocking callers it forces an
> unnecessary sleep/wakeup cycle.
> 
> Flush the backlog inside tls_rx_rec_wait() before checking
> sk_receive_queue so the strparser can parse newly-arrived
> segments immediately. On the next loop iteration
> tls_read_flush_backlog() may redundantly flush, but this
> path is cold and the cost is negligible.
> 
> Backlog processing can run tcp_reset(), which calls
> tcp_done_with_error() to set sk->sk_err = ECONNRESET and then
> tcp_done() to set sk->sk_shutdown = SHUTDOWN_MASK. The pre-existing
> top-of-loop sk_err check already ran before the flush, so the
> freshly-set error would be masked by the next-line sk_shutdown test
> returning 0 (EOF). Re-check sk_err immediately before the sk_shutdown
> test so a connection abort surfaces as -ECONNRESET rather than a clean
> EOF.
> 
> Commit f508262ae9f2 ("tls: Preserve sk_err across recvmsg() when
> data has been copied") gave the top-of-loop sk_err check a
> has_copied split. The recheck applies the same handling: when the
> caller has already copied bytes, sk_err is reported but preserved
> so the error surfaces on the next call; otherwise sock_error()
> consumes it so the error is reported exactly once.
> 
> Suggested-by: Sabrina Dubroca <[email protected]>
> Link: https://lore.kernel.org/netdev/ahgHgQ84RCc8uYrG@krikkit/
> Reviewed-by: Hannes Reinecke <[email protected]>
> Signed-off-by: Chuck Lever <[email protected]>
> ---
>  net/tls/tls_sw.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)

Reviewed-by: Sabrina Dubroca <[email protected]>

Thanks for your patience with this series, Chuck.

-- 
Sabrina