Re: [RFC 0/4] net/tls: add support for the record size limit extension
From: Chuck Lever <hidden>
Date: 2025-07-29 13:38:26
Also in:
linux-doc, linux-nfs, linux-nvme, lkml
Hi Wilfred - On 7/28/25 10:41 PM, Wilfred Mallawa wrote:
From: Wilfred Mallawa <redacted> During a tls handshake, an endpoint may specify a maximum record size limit. As specified by [1]. which allows peers to negotiate a maximum plaintext record size during the TLS handshake. If a TLS endpoint receives a record larger than its advertised limit, it must send a fatal "record_overflow" alert [1]. Currently, this limit is not visble to the kernel, particularly in the case where userspace handles the handshake (tlshd/gnutls).
This paragraph essentially says "The spec says we can, so I'm implementing it". Generally we don't implement spec features just because they are there. What we reviewers need instead is a problem statement. What is not working for you, and why is this the best way to solve it?
This series in conjunction with the respective userspace changes for tlshd [2] and gnutls [3], adds support for the kernel the receive the negotiated record size limit through the existing netlink communication layer, and use this value to limit outgoing records to the size specified.
As Hannes asked elsewhere, why is it up to the TLS consumer to be aware of this limit? Given the description here, it sounds to me like something that should be handled for all consumers by the TLS layer.
[1] https://www.rfc-editor.org/rfc/rfc8449 [2] https://github.com/oracle/ktls-utils/pull/112 [3] https://gitlab.com/gnutls/gnutls/-/merge_requests/1989 Wilfred Mallawa (4): net/handshake: get negotiated tls record size limit net/tls/tls_sw: use the record size limit specified nvme/host/tcp: set max record size in the tls context nvme/target/tcp: set max record size in the tls context Documentation/netlink/specs/handshake.yaml | 3 +++ Documentation/networking/tls-handshake.rst | 8 +++++++- drivers/nvme/host/tcp.c | 18 +++++++++++++++++- drivers/nvme/target/tcp.c | 16 +++++++++++++++- include/net/handshake.h | 4 +++- include/net/tls.h | 1 + include/uapi/linux/handshake.h | 1 + net/handshake/genl.c | 5 +++-- net/handshake/tlshd.c | 15 +++++++++++++-- net/sunrpc/svcsock.c | 4 +++- net/sunrpc/xprtsock.c | 4 +++- net/tls/tls_sw.c | 10 +++++++++- 12 files changed, 78 insertions(+), 11 deletions(-)
-- Chuck Lever