From: Iuliana Prodan <iuliana.prodan@nxp.com>
To: Herbert Xu <herbert@gondor.apana.org.au>,
Horia Geanta <horia.geanta@nxp.com>,
Aymen Sghaier <aymen.sghaier@nxp.com>
Cc: "David S. Miller" <davem@davemloft.net>,
linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-imx <linux-imx@nxp.com>
Subject: [PATCH 05/14] crypto: caam - check authsize
Date: Thu, 18 Jul 2019 17:45:15 +0300 [thread overview]
Message-ID: <1563461124-24641-6-git-send-email-iuliana.prodan@nxp.com> (raw)
In-Reply-To: <1563461124-24641-1-git-send-email-iuliana.prodan@nxp.com>
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.prodan@nxp.com>
---
drivers/crypto/caam/caamalg.c | 13 +++++++++++++
drivers/crypto/caam/caamalg_qi.c | 14 ++++++++++++++
drivers/crypto/caam/caamalg_qi2.c | 14 ++++++++++++++
drivers/crypto/caam/common_if.c | 40 +++++++++++++++++++++++++++++++++++++++
drivers/crypto/caam/common_if.h | 4 ++++
5 files changed, 85 insertions(+)
diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c
index 6ac59b1..6682e67 100644
--- a/drivers/crypto/caam/caamalg.c
+++ b/drivers/crypto/caam/caamalg.c
@@ -377,6 +377,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 = check_gcm_authsize(authsize);
+ if (err)
+ return err;
ctx->authsize = authsize;
gcm_set_sh_desc(authenc);
@@ -440,6 +445,11 @@ static int rfc4106_setauthsize(struct crypto_aead *authenc,
unsigned int authsize)
{
struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+ int err;
+
+ err = check_rfc4106_authsize(authsize);
+ if (err)
+ return err;
ctx->authsize = authsize;
rfc4106_set_sh_desc(authenc);
@@ -504,6 +514,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 46097e3..5f9b14a 100644
--- a/drivers/crypto/caam/caamalg_qi.c
+++ b/drivers/crypto/caam/caamalg_qi.c
@@ -18,6 +18,7 @@
#include "qi.h"
#include "jr.h"
#include "caamalg_desc.h"
+#include "common_if.h"
/*
* crypto alg
@@ -371,6 +372,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 = check_gcm_authsize(authsize);
+ if (err)
+ return err;
ctx->authsize = authsize;
gcm_set_sh_desc(authenc);
@@ -472,6 +478,11 @@ static int rfc4106_setauthsize(struct crypto_aead *authenc,
unsigned int authsize)
{
struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+ int err;
+
+ err = check_rfc4106_authsize(authsize);
+ if (err)
+ return err;
ctx->authsize = authsize;
rfc4106_set_sh_desc(authenc);
@@ -581,6 +592,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 da4abf1..0b4de21 100644
--- a/drivers/crypto/caam/caamalg_qi2.c
+++ b/drivers/crypto/caam/caamalg_qi2.c
@@ -10,6 +10,7 @@
#include "dpseci_cmd.h"
#include "desc_constr.h"
#include "error.h"
+#include "common_if.h"
#include "sg_sw_sec4.h"
#include "sg_sw_qm2.h"
#include "key_gen.h"
@@ -719,6 +720,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 = check_gcm_authsize(authsize);
+ if (err)
+ return err;
ctx->authsize = authsize;
gcm_set_sh_desc(authenc);
@@ -811,6 +817,11 @@ static int rfc4106_setauthsize(struct crypto_aead *authenc,
unsigned int authsize)
{
struct caam_ctx *ctx = crypto_aead_ctx(authenc);
+ int err;
+
+ err = check_rfc4106_authsize(authsize);
+ if (err)
+ return err;
ctx->authsize = authsize;
rfc4106_set_sh_desc(authenc);
@@ -913,6 +924,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/common_if.c b/drivers/crypto/caam/common_if.c
index 859d4b4..fcf47e6 100644
--- a/drivers/crypto/caam/common_if.c
+++ b/drivers/crypto/caam/common_if.c
@@ -26,6 +26,46 @@ int check_aes_keylen(unsigned int keylen)
}
EXPORT_SYMBOL(check_aes_keylen);
+/*
+ * validate authentication tag for GCM
+ */
+int check_gcm_authsize(unsigned int authsize)
+{
+ switch (authsize) {
+ case 4:
+ case 8:
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ case 16:
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+EXPORT_SYMBOL(check_gcm_authsize);
+
+/*
+ * validate authentication tag for RFC4106
+ */
+int check_rfc4106_authsize(unsigned int authsize)
+{
+ switch (authsize) {
+ case 8:
+ case 12:
+ case 16:
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+EXPORT_SYMBOL(check_rfc4106_authsize);
+
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("FSL CAAM drivers common location");
MODULE_AUTHOR("NXP Semiconductors");
diff --git a/drivers/crypto/caam/common_if.h b/drivers/crypto/caam/common_if.h
index 6964ba3..b17386a 100644
--- a/drivers/crypto/caam/common_if.h
+++ b/drivers/crypto/caam/common_if.h
@@ -10,4 +10,8 @@
int check_aes_keylen(unsigned int keylen);
+int check_gcm_authsize(unsigned int authsize);
+
+int check_rfc4106_authsize(unsigned int authsize);
+
#endif /* CAAM_COMMON_LOCATION_H */
--
2.1.0
next prev parent reply other threads:[~2019-07-18 14:46 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-18 14:45 [PATCH 00/14] crypto: caam - fixes for kernel v5.3 Iuliana Prodan
2019-07-18 14:45 ` [PATCH 01/14] crypto: caam/qi - fix error handling in ERN handler Iuliana Prodan
2019-07-18 14:45 ` [PATCH 02/14] crypto: caam - fix return code in completion callbacks Iuliana Prodan
2019-07-18 14:45 ` [PATCH 03/14] crypto: caam - update IV only when crypto operation succeeds Iuliana Prodan
2019-07-18 14:59 ` Horia Geanta
2019-07-18 14:45 ` [PATCH 04/14] crypto: caam - check key length Iuliana Prodan
2019-07-18 14:45 ` Iuliana Prodan [this message]
2019-07-18 14:45 ` [PATCH 06/14] crypto: caam - check assoclen Iuliana Prodan
2019-07-18 14:45 ` [PATCH 07/14] crypto: caam - check zero-length input Iuliana Prodan
2019-07-18 14:45 ` [PATCH 08/14] crypto: caam - update rfc4106 sh desc to support zero length input Iuliana Prodan
2019-07-18 14:45 ` [PATCH 09/14] crypto: caam - keep both virtual and dma key addresses Iuliana Prodan
2019-07-18 14:45 ` [PATCH 10/14] crypto: caam - fix DKP for certain key lengths Iuliana Prodan
2019-07-18 14:45 ` [PATCH 11/14] crypto: caam - free resources in case caam_rng registration failed Iuliana Prodan
2019-07-18 14:45 ` [PATCH 12/14] crypto: caam - execute module exit point only if necessary Iuliana Prodan
2019-07-18 14:45 ` [PATCH 13/14] crypto: caam - unregister algorithm only if the registration succeeded Iuliana Prodan
2019-07-18 14:45 ` [PATCH 14/14] crypto: caam - change return value in case CAAM has no MDHA Iuliana Prodan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1563461124-24641-6-git-send-email-iuliana.prodan@nxp.com \
--to=iuliana.prodan@nxp.com \
--cc=aymen.sghaier@nxp.com \
--cc=davem@davemloft.net \
--cc=herbert@gondor.apana.org.au \
--cc=horia.geanta@nxp.com \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-imx@nxp.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).