Skip to content

Commit bd3a479

Browse files
committed
selftests: tls: add test for data loss on small pipe
Add selftest for data loss on short splice. Link: https://patch.msgid.link/20260429222944.2139041-3-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 7e7be31 commit bd3a479

1 file changed

Lines changed: 43 additions & 0 deletions

File tree

  • tools/testing/selftests/net

tools/testing/selftests/net/tls.c

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -946,6 +946,49 @@ TEST_F(tls, peek_and_splice)
946946
EXPECT_EQ(memcmp(mem_send, mem_recv, send_len), 0);
947947
}
948948

949+
TEST_F(tls, splice_to_pipe_small)
950+
{
951+
int send_len = TLS_PAYLOAD_MAX_LEN;
952+
char mem_send[TLS_PAYLOAD_MAX_LEN];
953+
char mem_recv[TLS_PAYLOAD_MAX_LEN];
954+
size_t total = 0;
955+
int p[2];
956+
957+
memrnd(mem_send, sizeof(mem_send));
958+
959+
ASSERT_GE(pipe(p), 0);
960+
961+
/* Shrink pipe to 1 page (typically 4096 bytes) to force multiple
962+
* splice iterations for a 16384-byte TLS record.
963+
*/
964+
EXPECT_GE(fcntl(p[1], F_SETPIPE_SZ, 4096), 4096);
965+
966+
EXPECT_EQ(send(self->fd, mem_send, send_len, 0), send_len);
967+
968+
while (total < (size_t)send_len) {
969+
ssize_t spliced, drained;
970+
971+
spliced = splice(self->cfd, NULL, p[1], NULL,
972+
send_len - total, 0);
973+
EXPECT_GT(spliced, 0);
974+
if (spliced <= 0)
975+
break;
976+
977+
drained = read(p[0], mem_recv + total, spliced);
978+
EXPECT_EQ(drained, spliced);
979+
if (drained <= 0)
980+
break;
981+
982+
total += drained;
983+
}
984+
985+
EXPECT_EQ(total, (size_t)send_len);
986+
EXPECT_EQ(memcmp(mem_send, mem_recv, send_len), 0);
987+
988+
close(p[0]);
989+
close(p[1]);
990+
}
991+
949992
#define MAX_FRAGS 48
950993
TEST_F(tls, splice_short)
951994
{

0 commit comments

Comments
 (0)