Commit 1c799571 authored by Herbert Xu's avatar Herbert Xu

crypto: api - Increase MAX_ALGAPI_ALIGNMASK to 127

Previously we limited the maximum alignment mask to 63.  This
is mostly due to stack usage for shash.  This patch introduces
a separate limit for shash algorithms and increases the general
limit to 127 which is the value that we need for DMA allocations
on arm64.
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 12658ac5
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
#include "internal.h" #include "internal.h"
#define MAX_SHASH_ALIGNMASK 63
static const struct crypto_type crypto_shash_type; static const struct crypto_type crypto_shash_type;
int shash_no_setkey(struct crypto_shash *tfm, const u8 *key, int shash_no_setkey(struct crypto_shash *tfm, const u8 *key,
...@@ -88,7 +90,7 @@ static int shash_update_unaligned(struct shash_desc *desc, const u8 *data, ...@@ -88,7 +90,7 @@ static int shash_update_unaligned(struct shash_desc *desc, const u8 *data,
* We cannot count on __aligned() working for large values: * We cannot count on __aligned() working for large values:
* https://patchwork.kernel.org/patch/9507697/ * https://patchwork.kernel.org/patch/9507697/
*/ */
u8 ubuf[MAX_ALGAPI_ALIGNMASK * 2]; u8 ubuf[MAX_SHASH_ALIGNMASK * 2];
u8 *buf = PTR_ALIGN(&ubuf[0], alignmask + 1); u8 *buf = PTR_ALIGN(&ubuf[0], alignmask + 1);
int err; int err;
...@@ -130,7 +132,7 @@ static int shash_final_unaligned(struct shash_desc *desc, u8 *out) ...@@ -130,7 +132,7 @@ static int shash_final_unaligned(struct shash_desc *desc, u8 *out)
* We cannot count on __aligned() working for large values: * We cannot count on __aligned() working for large values:
* https://patchwork.kernel.org/patch/9507697/ * https://patchwork.kernel.org/patch/9507697/
*/ */
u8 ubuf[MAX_ALGAPI_ALIGNMASK + HASH_MAX_DIGESTSIZE]; u8 ubuf[MAX_SHASH_ALIGNMASK + HASH_MAX_DIGESTSIZE];
u8 *buf = PTR_ALIGN(&ubuf[0], alignmask + 1); u8 *buf = PTR_ALIGN(&ubuf[0], alignmask + 1);
int err; int err;
...@@ -524,6 +526,9 @@ static int shash_prepare_alg(struct shash_alg *alg) ...@@ -524,6 +526,9 @@ static int shash_prepare_alg(struct shash_alg *alg)
alg->statesize > HASH_MAX_STATESIZE) alg->statesize > HASH_MAX_STATESIZE)
return -EINVAL; return -EINVAL;
if (base->cra_alignmask > MAX_SHASH_ALIGNMASK)
return -EINVAL;
if ((alg->export && !alg->import) || (alg->import && !alg->export)) if ((alg->export && !alg->import) || (alg->import && !alg->export))
return -EINVAL; return -EINVAL;
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
* algs and architectures. Ciphers have a lower maximum size. * algs and architectures. Ciphers have a lower maximum size.
*/ */
#define MAX_ALGAPI_BLOCKSIZE 160 #define MAX_ALGAPI_BLOCKSIZE 160
#define MAX_ALGAPI_ALIGNMASK 63 #define MAX_ALGAPI_ALIGNMASK 127
#define MAX_CIPHER_BLOCKSIZE 16 #define MAX_CIPHER_BLOCKSIZE 16
#define MAX_CIPHER_ALIGNMASK 15 #define MAX_CIPHER_ALIGNMASK 15
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment