Re: copy on write for splice() from file to pipe?

Andy Lutomirski
2023-02-17T23:14:57Z

> On Feb 13, 2023, at 5:22 PM, Herbert Xu <herbert@gondor.apana.org.au> wrote:
>
> ﻿On Mon, Feb 13, 2023 at 10:01:27AM -0800, Andy Lutomirski wrote:
>>
>> There's a difference between "kernel speaks TCP (or whatever)
>> correctly" and "kernel does what the application needs it to do".
>
> Sure I get where you are coming from. It's just that the other
> participants in the discussion were thinking of stability for the
> sake of TCP (or TLS or some other protocol the kernel implements)
> and that simply is a non-issue.

I can certainly imagine TLS or similar protocols breaking if data
changes if the implementation is too clever and retransmission
happens. Suppose 2000 bytes are sent via splice using in-kernel TLS,
and it goes out on the wire as two TCP segments. The first segment is
dropped but the second is received. The kernel resends the first
segment using different data. This really ought to cause an integrity
check at the far end to fail.

I don't know if any existing kTLS is clever enough to regenerate
outgoing data when it needs to retransmit a segment, but it would be
an interesting optimization for serving static content over TLS.

>
> Having a better way to communicate completion to the user would be
> nice. The only way to do it right now seems to be polling with
> SIOCOUTQ.
>
>