>From 8690e52f7e90663b14b2490d37a3b5b1c5a53bfe Mon Sep 17 00:00:00 2001 From: Stephan Mueller <smueller@xxxxxxxxxx> Date: Mon, 9 Jan 2017 12:35:35 +0100 Subject: Invoke the crypto_aead_copy_ad function during the encryption code path to copy the AAD from the source to the destination buffer. Signed-off-by: Stephan Mueller <smueller@xxxxxxxxxx> --- crypto/gcm.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/crypto/gcm.c b/crypto/gcm.c index b7ad808..1ca0b05c 100644 --- a/crypto/gcm.c +++ b/crypto/gcm.c @@ -496,11 +496,16 @@ static int crypto_gcm_encrypt(struct aead_request *req) struct crypto_gcm_req_priv_ctx *pctx = crypto_gcm_reqctx(req); struct skcipher_request *skreq = &pctx->u.skreq; u32 flags = aead_request_flags(req); + int err; crypto_gcm_init_common(req); crypto_gcm_init_crypt(req, req->cryptlen); skcipher_request_set_callback(skreq, flags, gcm_encrypt_done, req); + err = crypto_aead_copy_ad(req); + if (err) + return err; + return crypto_skcipher_encrypt(skreq) ?: gcm_encrypt_continue(req, flags); } @@ -866,9 +871,15 @@ static struct aead_request *crypto_rfc4106_crypt(struct aead_request *req) static int crypto_rfc4106_encrypt(struct aead_request *req) { + int err; + if (req->assoclen != 16 && req->assoclen != 20) return -EINVAL; + err = crypto_aead_copy_ad(req); + if (err) + return err; + req = crypto_rfc4106_crypt(req); return crypto_aead_encrypt(req); @@ -1099,6 +1110,12 @@ static int crypto_rfc4543_copy_src_to_dst(struct aead_request *req, bool enc) static int crypto_rfc4543_encrypt(struct aead_request *req) { + int err; + + err = crypto_aead_copy_ad(req); + if (err) + return err; + return crypto_rfc4543_crypt(req, true); } -- 2.9.3 -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html