git: d718c2d3c805 - main - aesni: Handle requests with an empty payload.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 06 Oct 2021 21:10:33 UTC
The branch main has been updated by jhb:
URL: https://cgit.FreeBSD.org/src/commit/?id=d718c2d3c805001db0b0ae0cc0c8a811b8a90a95
commit d718c2d3c805001db0b0ae0cc0c8a811b8a90a95
Author: John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2021-10-06 21:08:47 +0000
Commit: John Baldwin <jhb@FreeBSD.org>
CommitDate: 2021-10-06 21:08:47 +0000
aesni: Handle requests with an empty payload.
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D32113
---
sys/crypto/aesni/aesni.c | 28 ++++++++++++++++++----------
1 file changed, 18 insertions(+), 10 deletions(-)
diff --git a/sys/crypto/aesni/aesni.c b/sys/crypto/aesni/aesni.c
index 67dcef123429..7d4dbd2c1604 100644
--- a/sys/crypto/aesni/aesni.c
+++ b/sys/crypto/aesni/aesni.c
@@ -700,28 +700,36 @@ aesni_cipher_crypt(struct aesni_session *ses, struct cryptop *crp,
int error;
bool encflag, allocated, authallocated, outallocated, outcopy;
- buf = aesni_cipher_alloc(crp, crp->crp_payload_start,
- crp->crp_payload_length, &allocated);
- if (buf == NULL)
- return (ENOMEM);
+ if (crp->crp_payload_length == 0) {
+ buf = NULL;
+ allocated = false;
+ } else {
+ buf = aesni_cipher_alloc(crp, crp->crp_payload_start,
+ crp->crp_payload_length, &allocated);
+ if (buf == NULL)
+ return (ENOMEM);
+ }
outallocated = false;
authallocated = false;
authbuf = NULL;
if (csp->csp_cipher_alg == CRYPTO_AES_NIST_GCM_16 ||
csp->csp_cipher_alg == CRYPTO_AES_CCM_16) {
- if (crp->crp_aad != NULL)
+ if (crp->crp_aad_length == 0) {
+ authbuf = NULL;
+ } else if (crp->crp_aad != NULL) {
authbuf = crp->crp_aad;
- else
+ } else {
authbuf = aesni_cipher_alloc(crp, crp->crp_aad_start,
crp->crp_aad_length, &authallocated);
- if (authbuf == NULL) {
- error = ENOMEM;
- goto out;
+ if (authbuf == NULL) {
+ error = ENOMEM;
+ goto out;
+ }
}
}
- if (CRYPTO_HAS_OUTPUT_BUFFER(crp)) {
+ if (CRYPTO_HAS_OUTPUT_BUFFER(crp) && crp->crp_payload_length > 0) {
outbuf = crypto_buffer_contiguous_subsegment(&crp->crp_obuf,
crp->crp_payload_output_start, crp->crp_payload_length);
if (outbuf == NULL) {