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

Hannes Reinecke hare at suse.de
Mon Jun 12 00:14:23 PDT 2023


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 at kernel.org>
>> Cc: netdev at vger.kernel.org
>> Signed-off-by: Hannes Reinecke <hare at 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 at 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




More information about the Linux-nvme mailing list