The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=d7c807aa884d178e9bd17afe7adaccb22b3b0dc3
commit d7c807aa884d178e9bd17afe7adaccb22b3b0dc3 Author: Konstantin Belousov <k...@freebsd.org> AuthorDate: 2025-07-09 01:41:16 +0000 Commit: Konstantin Belousov <k...@freebsd.org> CommitDate: 2025-07-10 14:42:27 +0000 sysctl net.inet.tcp.ktcplist: properly fill driver status length field Also ignore errors from drivers. If driver snd_tag status method returned an error, silently ignore the returned string, and not advance the position of the filled buffer. Sponsored by: Nvidia networking --- sys/netinet/tcp_subr.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c index 45048fb3848d..db415f6bdf03 100644 --- a/sys/netinet/tcp_subr.c +++ b/sys/netinet/tcp_subr.c @@ -2722,11 +2722,13 @@ tcp_ktlslist_locked(SYSCTL_HANDLER_ARGS, bool export_keys) sz = SND_TAG_STATUS_MAXLEN; in_pcbref(inp); INP_RUNLOCK(inp); - ksr->snd_tag->sw->snd_tag_status_str( + error = ksr->snd_tag->sw-> + snd_tag_status_str( ksr->snd_tag, NULL, &sz); if (in_pcbrele_rlock(inp)) return (EDEADLK); - len += sz; + if (error == 0) + len += sz; } } kss = so->so_snd.sb_tls_info; @@ -2745,11 +2747,13 @@ tcp_ktlslist_locked(SYSCTL_HANDLER_ARGS, bool export_keys) sz = SND_TAG_STATUS_MAXLEN; in_pcbref(inp); INP_RUNLOCK(inp); - kss->snd_tag->sw->snd_tag_status_str( + error = kss->snd_tag->sw-> + snd_tag_status_str( kss->snd_tag, NULL, &sz); if (in_pcbrele_rlock(inp)) return (EDEADLK); - len += sz; + if (error == 0) + len += sz; } } if (p) { @@ -2821,11 +2825,14 @@ tcp_ktlslist_locked(SYSCTL_HANDLER_ARGS, bool export_keys) sz = SND_TAG_STATUS_MAXLEN; in_pcbref(inp); INP_RUNLOCK(inp); - ksr->snd_tag->sw->snd_tag_status_str( + error = ksr->snd_tag->sw->snd_tag_status_str( ksr->snd_tag, buf + len, &sz); if (in_pcbrele_rlock(inp)) return (EDEADLK); - len += sz; + if (error == 0) { + xktls->rcv.drv_st_len = sz; + len += sz; + } } } if (kss != NULL && kss->gen == xig.xig_gen) { @@ -2842,11 +2849,14 @@ tcp_ktlslist_locked(SYSCTL_HANDLER_ARGS, bool export_keys) sz = SND_TAG_STATUS_MAXLEN; in_pcbref(inp); INP_RUNLOCK(inp); - kss->snd_tag->sw->snd_tag_status_str( + error = kss->snd_tag->sw->snd_tag_status_str( kss->snd_tag, buf + len, &sz); if (in_pcbrele_rlock(inp)) return (EDEADLK); - len += sz; + if (error == 0) { + xktls->snd.drv_st_len = sz; + len += sz; + } } } len = roundup2(len, __alignof(*xktls));