diff options
author | John Baldwin <jhb@FreeBSD.org> | 2021-10-06 21:08:47 +0000 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2021-10-06 21:08:47 +0000 |
commit | a0cbcbb7917b0b8566ec0853425a73d7958ddbed (patch) | |
tree | c277633dcaba9c55ae0537314167cc2e0995d355 /sys | |
parent | 70dbebea124236184a66a30175ba307793971f00 (diff) | |
download | src-a0cbcbb7917b0b8566ec0853425a73d7958ddbed.tar.gz src-a0cbcbb7917b0b8566ec0853425a73d7958ddbed.zip |
Diffstat (limited to 'sys')
-rw-r--r-- | sys/opencrypto/cryptodev.c | 11 |
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; } |