Page MenuHomeFreeBSD

D30139.diff
No OneTemporary

D30139.diff

diff --git a/sys/kern/uipc_ktls.c b/sys/kern/uipc_ktls.c
--- a/sys/kern/uipc_ktls.c
+++ b/sys/kern/uipc_ktls.c
@@ -1981,14 +1981,16 @@
counter_u64_add(ktls_cnt_tx_queued, 1);
}
+#define MAX_TLS_PAGES (1 + btoc(TLS_MAX_MSG_SIZE_V10_2))
+
static __noinline void
ktls_encrypt(struct ktls_wq *wq, struct mbuf *top)
{
struct ktls_session *tls;
struct socket *so;
struct mbuf *m;
- vm_paddr_t parray[1 + btoc(TLS_MAX_MSG_SIZE_V10_2)];
- struct iovec dst_iov[1 + btoc(TLS_MAX_MSG_SIZE_V10_2)];
+ vm_paddr_t parray[MAX_TLS_PAGES + 1];
+ struct iovec dst_iov[MAX_TLS_PAGES + 2];
vm_page_t pg;
void *cbuf;
int error, i, len, npages, off, total_pages;
@@ -2072,8 +2074,12 @@
dst_iov[i].iov_len = len;
}
}
+ KASSERT(i + 1 <= nitems(dst_iov),
+ ("dst_iov is too small"));
+ dst_iov[i].iov_base = m->m_epg_trail;
+ dst_iov[i].iov_len = m->m_epg_trllen;
- error = (*tls->sw_encrypt)(tls, m, dst_iov, i);
+ error = (*tls->sw_encrypt)(tls, m, dst_iov, i + 1);
/* Free the old pages. */
m->m_ext.ext_free(m);
diff --git a/sys/opencrypto/ktls_ocf.c b/sys/opencrypto/ktls_ocf.c
--- a/sys/opencrypto/ktls_ocf.c
+++ b/sys/opencrypto/ktls_ocf.c
@@ -286,13 +286,8 @@
memcpy(crp.crp_iv, hdr + 1, AES_BLOCK_LEN);
if (outiov != NULL) {
- /* Duplicate iovec and append vector for trailer. */
- memcpy(iov, outiov, outiovcnt * sizeof(struct iovec));
- iov[outiovcnt].iov_base = m->m_epg_trail;
- iov[outiovcnt].iov_len = m->m_epg_trllen;
-
- uio.uio_iov = iov;
- uio.uio_iovcnt = outiovcnt + 1;
+ uio.uio_iov = outiov;
+ uio.uio_iovcnt = outiovcnt;
uio.uio_offset = 0;
uio.uio_segflg = UIO_SYSSPACE;
uio.uio_td = curthread;
@@ -336,7 +331,6 @@
struct tls_aead_data ad;
struct cryptop crp;
struct ocf_session *os;
- struct iovec iov[outiovcnt + 1];
int error;
uint16_t tls_comp_len;
@@ -376,14 +370,10 @@
crp.crp_payload_length = tls_comp_len;
if (outiov != NULL) {
- /* Duplicate iovec and append vector for tag. */
- memcpy(iov, outiov, outiovcnt * sizeof(struct iovec));
- iov[outiovcnt].iov_base = m->m_epg_trail;
- iov[outiovcnt].iov_len = tls->params.tls_tlen;
crp.crp_digest_start = crp.crp_payload_length;
- uio.uio_iov = iov;
- uio.uio_iovcnt = outiovcnt + 1;
+ uio.uio_iov = outiov;
+ uio.uio_iovcnt = outiovcnt;
uio.uio_offset = 0;
uio.uio_segflg = UIO_SYSSPACE;
uio.uio_td = curthread;
@@ -486,7 +476,6 @@
char nonce[12];
struct cryptop crp;
struct ocf_session *os;
- struct iovec iov[outiovcnt + 1];
int error;
os = tls->cipher;
@@ -516,14 +505,10 @@
crp.crp_payload_length++;
if (outiov != NULL) {
- /* Duplicate iovec and append vector for tag. */
- memcpy(iov, outiov, outiovcnt * sizeof(struct iovec));
- iov[outiovcnt].iov_base = m->m_epg_trail;
- iov[outiovcnt].iov_len = tls->params.tls_tlen;
crp.crp_digest_start = crp.crp_payload_length;
- uio.uio_iov = iov;
- uio.uio_iovcnt = outiovcnt + 1;
+ uio.uio_iov = outiov;
+ uio.uio_iovcnt = outiovcnt;
uio.uio_offset = 0;
uio.uio_segflg = UIO_SYSSPACE;
uio.uio_td = curthread;

File Metadata

Mime Type
text/plain
Expires
Wed, Apr 30, 9:32 PM (8 h, 36 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17865445
Default Alt Text
D30139.diff (3 KB)

Event Timeline