Re: [PATCH net-next v11 2/6] tls: Re-present partially-consumed records in tls_sw_read_sock()
Hannes Reinecke <[email protected]> Wed, 27 May 2026 11:48:59 +0200
| Newsgroups | dev.linux.lists.kernel-tls-handshake,org.kernel.vger.netdev |
|---|---|
| Message-ID | <[email protected]> |
On 5/26/26 16:21, Chuck Lever wrote: > From: Chuck Lever <[email protected]> > > The tls_sw_read_sock() loop releases the current skb whether > read_actor() consumed the full record or only a prefix. When > the actor takes only part of the record and leaves desc->count > non-zero, the remainder is lost: skb is neither requeued nor > freed, and the next iteration overwrites it during dequeue or > tls_rx_rec_wait(). > > No mainline consumer reaches this path today. The only > in-tree TLS read_sock user is nvme/tcp, whose actor > nvme_tcp_recv_skb() loops until the input length is exhausted > and returns either the full length or a negative error. > > The path becomes reachable with the upcoming NFSD svcsock > receive built on read_sock_cmsg. Its data actor, > svc_tcp_recv_actor(), parses an RPC fragment stream > incrementally and returns at fragment boundaries. When a TLS > record carries the tail of one RPC fragment plus the head of > the next, the actor returns fewer bytes than offered while > leaving desc->count non-zero, and without re-presentation the > trailing fragment header vanishes. > > __tcp_read_sock() handles the equivalent case for plain TCP > by leaving the unread bytes available for the next iteration > to re-present, via sequence-number re-lookup. Adopt the same > loop-level behavior: when read_actor() consumes only part of > the record, update rxm->offset and rxm->full_len and requeue > the skb to the head of rx_list so the next iteration > re-presents the unread bytes. Switch the open-ended for-loop > to "while (desc->count)" so the partial- and full-consume > arms share a single exit check and read_actor() is not > re-invoked once desc->count is exhausted. > > Cc: Sagi Grimberg <[email protected]> > Signed-off-by: Chuck Lever <[email protected]> > --- > net/tls/tls_sw.c | 7 ++----- > 1 file changed, 2 insertions(+), 5 deletions(-) > Reviewed-by: Hannes Reinecke <[email protected]> Cheers, Hannes -- Dr. Hannes Reinecke Kernel Storage Architect [email protected] +49 911 74053 688 SUSE Software Solutions GmbH, Frankenstr. 146, 90461 Nürnberg HRB 36809 (AG Nürnberg), GF: I. Totev, A. McDonald, W. Knoblich