aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2021-10-06 21:08:47 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2021-10-06 21:08:47 +0000
commita0cbcbb7917b0b8566ec0853425a73d7958ddbed (patch)
treec277633dcaba9c55ae0537314167cc2e0995d355 /sys
parent70dbebea124236184a66a30175ba307793971f00 (diff)
downloadsrc-a0cbcbb7917b0b8566ec0853425a73d7958ddbed.tar.gz
src-a0cbcbb7917b0b8566ec0853425a73d7958ddbed.zip
Diffstat (limited to 'sys')
-rw-r--r--sys/opencrypto/cryptodev.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/opencrypto/cryptodev.c b/sys/opencrypto/cryptodev.c
index 3224ed3f900c..9312945a9b8b 100644
--- a/sys/opencrypto/cryptodev.c
+++ b/sys/opencrypto/cryptodev.c
@@ -781,7 +781,7 @@ cryptodev_op(struct csession *cse, const struct crypt_op *cop)
}
if (cse->txform) {
- if (cop->len == 0 || (cop->len % cse->txform->blocksize) != 0) {
+ if ((cop->len % cse->txform->blocksize) != 0) {
SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__);
return (EINVAL);
}
@@ -836,6 +836,12 @@ cryptodev_op(struct csession *cse, const struct crypt_op *cop)
}
break;
case CSP_MODE_CIPHER:
+ if (cop->len == 0 ||
+ (cop->iv == NULL && cop->len == cse->ivsize)) {
+ SDT_PROBE1(opencrypto, dev, ioctl, error, __LINE__);
+ error = EINVAL;
+ goto bail;
+ }
switch (cop->op) {
case COP_ENCRYPT:
crp->crp_op = CRYPTO_OP_ENCRYPT;
@@ -919,8 +925,9 @@ cryptodev_op(struct csession *cse, const struct crypt_op *cop)
goto bail;
}
crp->crp_iv_start = 0;
- crp->crp_payload_start += cse->ivsize;
crp->crp_payload_length -= cse->ivsize;
+ if (crp->crp_payload_length != 0)
+ crp->crp_payload_start = cse->ivsize;
dst += cse->ivsize;
}