aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2020-02-25 19:26:40 +0000
committerGleb Smirnoff <glebius@FreeBSD.org>2020-02-25 19:26:40 +0000
commitf85e1a806b40f01a427f25766ba6e56dcc681d69 (patch)
tree5d2dde497005a764de83d734a9a96cf7069d90e5
parentf4d9fa68096d5d12a0ed9aa40d0d95c5308a0f75 (diff)
downloadsrc-f85e1a806b40f01a427f25766ba6e56dcc681d69.tar.gz
src-f85e1a806b40f01a427f25766ba6e56dcc681d69.zip
Make ktls_frame() never fail. Caller must supply correct mbufs.
This makes sendfile code a bit simplier.
Notes
Notes: svn path=/head/; revision=358319
-rw-r--r--sys/kern/kern_sendfile.c8
-rw-r--r--sys/kern/uipc_ktls.c10
-rw-r--r--sys/kern/uipc_socket.c6
-rw-r--r--sys/sys/ktls.h2
4 files changed, 8 insertions, 18 deletions
diff --git a/sys/kern/kern_sendfile.c b/sys/kern/kern_sendfile.c
index c6d36384d332..4d94ea8bf1f2 100644
--- a/sys/kern/kern_sendfile.c
+++ b/sys/kern/kern_sendfile.c
@@ -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) {
/*
diff --git a/sys/kern/uipc_ktls.c b/sys/kern/uipc_ktls.c
index a6f272329c71..69aaef92ee00 100644
--- a/sys/kern/uipc_ktls.c
+++ b/sys/kern/uipc_ktls.c
@@ -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, int *enq_cnt,
* 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, int *enq_cnt,
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, int *enq_cnt,
*enq_cnt += pgs->npgs;
}
}
- return (0);
}
void
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c
index 72c9b16f4476..25c221dc57be 100644
--- a/sys/kern/uipc_socket.c
+++ b/sys/kern/uipc_socket.c
@@ -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
diff --git a/sys/sys/ktls.h b/sys/sys/ktls.h
index 13a43b9beea7..4790511e12c0 100644
--- a/sys/sys/ktls.h
+++ b/sys/sys/ktls.h
@@ -177,7 +177,7 @@ int ktls_crypto_backend_register(struct ktls_crypto_backend *be);
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);