summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/opencrypto/cryptosoft.c
diff options
context:
space:
mode:
Diffstat (limited to 'freebsd/sys/opencrypto/cryptosoft.c')
-rw-r--r--freebsd/sys/opencrypto/cryptosoft.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/freebsd/sys/opencrypto/cryptosoft.c b/freebsd/sys/opencrypto/cryptosoft.c
index 55e98b13..69993ae0 100644
--- a/freebsd/sys/opencrypto/cryptosoft.c
+++ b/freebsd/sys/opencrypto/cryptosoft.c
@@ -86,7 +86,7 @@ static int
swcr_encdec(struct cryptodesc *crd, struct swcr_data *sw, caddr_t buf,
int flags)
{
- unsigned char iv[EALG_MAX_BLOCK_LEN], blk[EALG_MAX_BLOCK_LEN], *idat;
+ unsigned char iv[EALG_MAX_BLOCK_LEN], blk[EALG_MAX_BLOCK_LEN];
unsigned char *ivp, *nivp, iv2[EALG_MAX_BLOCK_LEN];
struct enc_xform *exf;
int i, j, k, blks, ind, count, ivlen;
@@ -251,11 +251,13 @@ swcr_encdec(struct cryptodesc *crd, struct swcr_data *sw, caddr_t buf,
}
while (uio->uio_iov[ind].iov_len >= k + blks && i > 0) {
+ uint8_t *idat;
size_t nb, rem;
nb = blks;
- rem = uio->uio_iov[ind].iov_len - k;
- idat = (char *)uio->uio_iov[ind].iov_base + k;
+ rem = MIN((size_t)i,
+ uio->uio_iov[ind].iov_len - (size_t)k);
+ idat = (uint8_t *)uio->uio_iov[ind].iov_base + k;
if (exf->reinit) {
if ((crd->crd_flags & CRD_F_ENCRYPT) != 0 &&
@@ -298,7 +300,6 @@ swcr_encdec(struct cryptodesc *crd, struct swcr_data *sw, caddr_t buf,
ivp = nivp;
}
- idat += nb;
count += nb;
k += nb;
i -= nb;