Page MenuHomeFreeBSD

D56610.id176298.diff
No OneTemporary

D56610.id176298.diff

diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c
--- a/sys/netinet/tcp_subr.c
+++ b/sys/netinet/tcp_subr.c
@@ -4247,6 +4247,14 @@
TCPSTATES_DEC(tp->t_state);
TCPSTATES_INC(newstate);
tp->t_state = newstate;
+
+#ifdef KERN_TLS
+ /* release ktls snd tag after last data is sent */
+ if (newstate >= TCPS_FIN_WAIT_2 &&
+ tptosocket(tp)->so_snd.sb_tls_info != NULL) {
+ ktls_release_snd_tag(tptosocket(tp)->so_snd.sb_tls_info);
+ }
+#endif
TCP_PROBE6(state__change, NULL, tp, NULL, tp, NULL, pstate);
}
diff --git a/sys/sys/ktls.h b/sys/sys/ktls.h
--- a/sys/sys/ktls.h
+++ b/sys/sys/ktls.h
@@ -28,6 +28,7 @@
#define _SYS_KTLS_H_
#ifdef _KERNEL
+#include <sys/mbuf.h>
#include <sys/_null.h>
#include <sys/refcount.h>
#include <sys/_task.h>
@@ -285,6 +286,17 @@
ktls_destroy(tls);
}
+static inline void
+ktls_release_snd_tag(struct ktls_session *tls)
+{
+ struct m_snd_tag *mst;
+
+ mst = tls->snd_tag;
+ tls->snd_tag = NULL;
+ if (mst != NULL)
+ m_snd_tag_rele(mst);
+}
+
void ktls_session_to_xktls_onedir(const struct ktls_session *ks,
bool export_keys, struct xktls_session_onedir *xktls_od);
void ktls_session_copy_keys(const struct ktls_session *ktls,

File Metadata

Mime Type
text/plain
Expires
Wed, Jul 22, 12:53 PM (6 h, 28 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35364731
Default Alt Text
D56610.id176298.diff (1 KB)

Event Timeline