diff options
author | Gleb Smirnoff <glebius@FreeBSD.org> | 2020-02-25 19:26:40 +0000 |
---|---|---|
committer | Gleb Smirnoff <glebius@FreeBSD.org> | 2020-02-25 19:26:40 +0000 |
commit | f85e1a806b40f01a427f25766ba6e56dcc681d69 (patch) | |
tree | 5d2dde497005a764de83d734a9a96cf7069d90e5 | |
parent | f4d9fa68096d5d12a0ed9aa40d0d95c5308a0f75 (diff) | |
download | src-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.c | 8 | ||||
-rw-r--r-- | sys/kern/uipc_ktls.c | 10 | ||||
-rw-r--r-- | sys/kern/uipc_socket.c | 6 | ||||
-rw-r--r-- | sys/sys/ktls.h | 2 |
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); |