git: d7c807aa884d - main - sysctl net.inet.tcp.ktcplist: properly fill driver status length field
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 10 Jul 2025 14:42:49 UTC
The branch main has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=d7c807aa884d178e9bd17afe7adaccb22b3b0dc3
commit d7c807aa884d178e9bd17afe7adaccb22b3b0dc3
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2025-07-09 01:41:16 +0000
Commit: Konstantin Belousov <kib@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));