>From 8690e52f7e90663b14b2490d37a3b5b1c5a53bfe Mon Sep 17 00:00:00 2001
From: Stephan Mueller <smuel...@chronox.de>
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 <smuel...@chronox.de>
---
 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to