Re: [PATCH 1/4] net/tls: handle MSG_EOR for tls_sw TX flow

Hannes Reinecke
2023-06-12T07:14:32Z

On 6/9/23 18:37, Sabrina Dubroca wrote:
> Hi Hannes,
>
> 2023-06-09, 14:51:50 +0200, Hannes Reinecke wrote:
>> tls_sw_sendmsg() / tls_do_sw_sendpage() already handles
>> MSG_MORE / MSG_SENDPAGE_NOTLAST, but bails out on MSG_EOR.
>> But seeing that MSG_EOR is basically the opposite of
>> MSG_MORE / MSG_SENDPAGE_NOTLAST this patch adds handling
>> MSG_EOR by treating it as the negation of MSG_MORE.
>>
>> Cc: Jakub Kicinski <kuba@kernel.org>
>> Cc: netdev@vger.kernel.org
>> Signed-off-by: Hannes Reinecke <hare@suse.de>
>> ---
>> net/tls/tls_sw.c | 11 ++++++++---
>> 1 file changed, 8 insertions(+), 3 deletions(-)
>>
>> diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c
>> index 635b8bf6b937..be8e0459d403 100644
>> --- a/net/tls/tls_sw.c
>> +++ b/net/tls/tls_sw.c
>> @@ -953,9 +953,12 @@ int tls_sw_sendmsg(struct sock *sk, struct msghdr *msg, size_t size)
>> int pending;
>>
>> if (msg->msg_flags & ~(MSG_MORE | MSG_DONTWAIT | MSG_NOSIGNAL |
>> - MSG_CMSG_COMPAT))
>> + MSG_EOR | MSG_CMSG_COMPAT))
>> return -EOPNOTSUPP;
>>
>> + if (msg->msg_flags & MSG_EOR)
>> + eor = true;
>
> Is MSG_EOR supposed to be incompatible with MSG_MORE, or is it
> supposed to cancel it? (ie: MSG_MORE | MSG_EOR is invalid, or
> MSG_MORE | MSG_EOR behaves like MSG_EOR) The current code already
> behaves as if _EOR was passed as long as MSG_MORE isn't passed, so
> _EOR is only needed to cancel out _MORE (or in your case, because
> NVMe-over-TLS sets it).
>
I guess the correct answer here is: Implementation defined.
Personally I would veer towards the first option (ie MSG_MORE is
incompatible with MSG_EOR), but then it depends on the implementation
to check for that. And most don't.

> If _EOR and _MORE (or MSG_SENDPAGE_NOTLAST below) are supposed to be
> incompatible, we should return an error when they're both set. If we
> accept both flags being set at the same time, I think we should
> document the expected behavior ("_EOR overrides _MORE/_NOTLAST") and
> add specific selftests to avoid regressions.
>
Hmm. Yes, guess you are correct. I'll be adding a check to make
MSG_MORE incompatible with MSG_EOR.

Cheers,

Hannes
--
Dr. Hannes Reinecke Kernel Storage Architect
hare@suse.de +49 911 74053 688
SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), Geschäftsführer: Ivo Totev, Andrew
Myers, Andrew McDonald, Martje Boudien Moerman