]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: tls: fix silent data drop under pipe back-pressure
authorJakub Kicinski <kuba@kernel.org>
Wed, 29 Apr 2026 22:29:38 +0000 (15:29 -0700)
committerJakub Kicinski <kuba@kernel.org>
Sun, 3 May 2026 01:27:14 +0000 (18:27 -0700)
tls_sw_splice_read() uses len when advancing rxm->offset / rxm->full_len
after skb_splice_bits(), rather than copied (the actual number of bytes
successfully spliced into the pipe). When the destination pipe cannot
accept all the requested bytes, splice_to_pipe() returns fewer bytes
than len, and 'len - copied' of data is effectively skipped over.

Fixes: e062fe99cccd ("tls: splice_read: fix accessing pre-processed records")
Link: https://patch.msgid.link/20260429222944.2139041-2-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/tls/tls_sw.c

index 798243eabb1f87fc6d3054ba300e149e4e313417..2590e855f6a5a90ca20ed33eb6e9b1e8dde07ab5 100644 (file)
@@ -2317,9 +2317,9 @@ ssize_t tls_sw_splice_read(struct socket *sock,  loff_t *ppos,
        if (copied < 0)
                goto splice_requeue;
 
-       if (chunk < rxm->full_len) {
-               rxm->offset += len;
-               rxm->full_len -= len;
+       if (copied < rxm->full_len) {
+               rxm->offset += copied;
+               rxm->full_len -= copied;
                goto splice_requeue;
        }