svn commit: r358319 - in head/sys: kern sys

Gleb Smirnoff glebius at FreeBSD.org
Tue Feb 25 19:26:42 UTC 2020


Author: glebius
Date: Tue Feb 25 19:26:40 2020
New Revision: 358319
URL: https://svnweb.freebsd.org/changeset/base/358319

Log:
  Make ktls_frame() never fail.  Caller must supply correct mbufs.
  This makes sendfile code a bit simplier.

Modified:
  head/sys/kern/kern_sendfile.c
  head/sys/kern/uipc_ktls.c
  head/sys/kern/uipc_socket.c
  head/sys/sys/ktls.h

Modified: head/sys/kern/kern_sendfile.c
==============================================================================
--- head/sys/kern/kern_sendfile.c	Tue Feb 25 19:12:40 2020	(r358318)
+++ head/sys/kern/kern_sendfile.c	Tue Feb 25 19:26:40 2020	(r358319)
@@ -1046,12 +1046,8 @@ prepend_header:
 
 		CURVNET_SET(so->so_vnet);
 #ifdef KERN_TLS
-		if (tls != NULL) {
-			error = ktls_frame(m, tls, &tls_enq_cnt,
-			    TLS_RLTYPE_APP);
-			if (error != 0)
-				goto done;
-		}
+		if (tls != NULL)
+			ktls_frame(m, tls, &tls_enq_cnt, TLS_RLTYPE_APP);
 #endif
 		if (nios == 0) {
 			/*

Modified: head/sys/kern/uipc_ktls.c
==============================================================================
--- head/sys/kern/uipc_ktls.c	Tue Feb 25 19:12:40 2020	(r358318)
+++ head/sys/kern/uipc_ktls.c	Tue Feb 25 19:26:40 2020	(r358319)
@@ -1231,7 +1231,7 @@ ktls_seq(struct sockbuf *sb, struct mbuf *m)
  * encryption.  The returned value should be passed to ktls_enqueue
  * when scheduling encryption of this chain of mbufs.
  */
-int
+void
 ktls_frame(struct mbuf *top, struct ktls_session *tls, int *enq_cnt,
     uint8_t record_type)
 {
@@ -1250,10 +1250,8 @@ ktls_frame(struct mbuf *top, struct ktls_session *tls,
 		 * records whose payload does not exceed the maximum
 		 * frame length.
 		 */
-		if (m->m_len > maxlen || m->m_len == 0)
-			return (EINVAL);
-		tls_len = m->m_len;
-
+		KASSERT(m->m_len <= maxlen && m->m_len > 0,
+		    ("ktls_frame: m %p len %d\n", m, m->m_len));
 		/*
 		 * TLS frames require unmapped mbufs to store session
 		 * info.
@@ -1261,6 +1259,7 @@ ktls_frame(struct mbuf *top, struct ktls_session *tls,
 		KASSERT((m->m_flags & M_NOMAP) != 0,
 		    ("ktls_frame: mapped mbuf %p (top = %p)\n", m, top));
 
+		tls_len = m->m_len;
 		pgs = m->m_ext.ext_pgs;
 
 		/* Save a reference to the session. */
@@ -1346,7 +1345,6 @@ ktls_frame(struct mbuf *top, struct ktls_session *tls,
 			*enq_cnt += pgs->npgs;
 		}
 	}
-	return (0);
 }
 
 void

Modified: head/sys/kern/uipc_socket.c
==============================================================================
--- head/sys/kern/uipc_socket.c	Tue Feb 25 19:12:40 2020	(r358318)
+++ head/sys/kern/uipc_socket.c	Tue Feb 25 19:26:40 2020	(r358319)
@@ -1591,12 +1591,8 @@ restart:
 					    M_NOMAP |
 					    ((flags & MSG_EOR) ? M_EOR : 0));
 					if (top != NULL) {
-						error = ktls_frame(top, tls,
+						ktls_frame(top, tls,
 						    &tls_enq_cnt, tls_rtype);
-						if (error) {
-							m_freem(top);
-							goto release;
-						}
 					}
 					tls_rtype = TLS_RLTYPE_APP;
 				} else

Modified: head/sys/sys/ktls.h
==============================================================================
--- head/sys/sys/ktls.h	Tue Feb 25 19:12:40 2020	(r358318)
+++ head/sys/sys/ktls.h	Tue Feb 25 19:26:40 2020	(r358319)
@@ -177,7 +177,7 @@ int ktls_crypto_backend_register(struct ktls_crypto_ba
 int ktls_crypto_backend_deregister(struct ktls_crypto_backend *be);
 int ktls_enable_tx(struct socket *so, struct tls_enable *en);
 void ktls_destroy(struct ktls_session *tls);
-int ktls_frame(struct mbuf *m, struct ktls_session *tls, int *enqueue_cnt,
+void ktls_frame(struct mbuf *m, struct ktls_session *tls, int *enqueue_cnt,
     uint8_t record_type);
 void ktls_seq(struct sockbuf *sb, struct mbuf *m);
 void ktls_enqueue(struct mbuf *m, struct socket *so, int page_count);


More information about the svn-src-all mailing list