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);
                               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);
 {
        struct caam_ctx *ctx = crypto_aead_ctx(authenc);
 
+       if (authsize != 16)
+               return -EINVAL;
+
        ctx->authsize = authsize;
        rfc4543_set_sh_desc(authenc);
 
 
 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);
                               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);
 {
        struct caam_ctx *ctx = crypto_aead_ctx(authenc);
 
+       if (authsize != 16)
+               return -EINVAL;
+
        ctx->authsize = authsize;
        rfc4543_set_sh_desc(authenc);
 
 
 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);
                               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);
 {
        struct caam_ctx *ctx = crypto_aead_ctx(authenc);
 
+       if (authsize != 16)
+               return -EINVAL;
+
        ctx->authsize = authsize;
        rfc4543_set_sh_desc(authenc);