Check authsize to solve the extra tests that expect -EINVAL to be
returned when the authentication tag size is not valid.

Validated authsize for GCM, RFC4106 and RFC4543.

Signed-off-by: Iuliana Prodan <iuliana.pro...@nxp.com>
Reviewed-by: Horia Geanta <horia.gea...@nxp.com>
---
 drivers/crypto/caam/caamalg.c     | 13 +++++++++++++
 drivers/crypto/caam/caamalg_qi.c  | 13 +++++++++++++
 drivers/crypto/caam/caamalg_qi2.c | 13 +++++++++++++
 3 files changed, 39 insertions(+)

diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c
index bb38f31..0461bf3 100644
--- a/drivers/crypto/caam/caamalg.c
+++ b/drivers/crypto/caam/caamalg.c
@@ -376,6 +376,11 @@ static int gcm_set_sh_desc(struct crypto_aead *aead)
 static int gcm_setauthsize(struct crypto_aead *authenc, unsigned int authsize)
 {
        struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+       int err;
+
+       err = crypto_gcm_check_authsize(authsize);
+       if (err)
+               return err;
 
        ctx->authsize = authsize;
        gcm_set_sh_desc(authenc);
@@ -439,6 +444,11 @@ static int rfc4106_setauthsize(struct crypto_aead *authenc,
                               unsigned int authsize)
 {
        struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+       int err;
+
+       err = crypto_rfc4106_check_authsize(authsize);
+       if (err)
+               return err;
 
        ctx->authsize = authsize;
        rfc4106_set_sh_desc(authenc);
@@ -503,6 +513,9 @@ static int rfc4543_setauthsize(struct crypto_aead *authenc,
 {
        struct caam_ctx *ctx = crypto_aead_ctx(authenc);
 
+       if (authsize != 16)
+               return -EINVAL;
+
        ctx->authsize = authsize;
        rfc4543_set_sh_desc(authenc);
 
diff --git a/drivers/crypto/caam/caamalg_qi.c b/drivers/crypto/caam/caamalg_qi.c
index b9c8581..8011a2a 100644
--- a/drivers/crypto/caam/caamalg_qi.c
+++ b/drivers/crypto/caam/caamalg_qi.c
@@ -371,6 +371,11 @@ static int gcm_set_sh_desc(struct crypto_aead *aead)
 static int gcm_setauthsize(struct crypto_aead *authenc, unsigned int authsize)
 {
        struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+       int err;
+
+       err = crypto_gcm_check_authsize(authsize);
+       if (err)
+               return err;
 
        ctx->authsize = authsize;
        gcm_set_sh_desc(authenc);
@@ -472,6 +477,11 @@ static int rfc4106_setauthsize(struct crypto_aead *authenc,
                               unsigned int authsize)
 {
        struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+       int err;
+
+       err = crypto_rfc4106_check_authsize(authsize);
+       if (err)
+               return err;
 
        ctx->authsize = authsize;
        rfc4106_set_sh_desc(authenc);
@@ -578,6 +588,9 @@ static int rfc4543_setauthsize(struct crypto_aead *authenc,
 {
        struct caam_ctx *ctx = crypto_aead_ctx(authenc);
 
+       if (authsize != 16)
+               return -EINVAL;
+
        ctx->authsize = authsize;
        rfc4543_set_sh_desc(authenc);
 
diff --git a/drivers/crypto/caam/caamalg_qi2.c 
b/drivers/crypto/caam/caamalg_qi2.c
index 0b672f93..e351ff2 100644
--- a/drivers/crypto/caam/caamalg_qi2.c
+++ b/drivers/crypto/caam/caamalg_qi2.c
@@ -719,6 +719,11 @@ static int gcm_set_sh_desc(struct crypto_aead *aead)
 static int gcm_setauthsize(struct crypto_aead *authenc, unsigned int authsize)
 {
        struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+       int err;
+
+       err = crypto_gcm_check_authsize(authsize);
+       if (err)
+               return err;
 
        ctx->authsize = authsize;
        gcm_set_sh_desc(authenc);
@@ -811,6 +816,11 @@ static int rfc4106_setauthsize(struct crypto_aead *authenc,
                               unsigned int authsize)
 {
        struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+       int err;
+
+       err = crypto_rfc4106_check_authsize(authsize);
+       if (err)
+               return err;
 
        ctx->authsize = authsize;
        rfc4106_set_sh_desc(authenc);
@@ -910,6 +920,9 @@ static int rfc4543_setauthsize(struct crypto_aead *authenc,
 {
        struct caam_ctx *ctx = crypto_aead_ctx(authenc);
 
+       if (authsize != 16)
+               return -EINVAL;
+
        ctx->authsize = authsize;
        rfc4543_set_sh_desc(authenc);
 
-- 
2.1.0

Reply via email to