Skip to content

Commit

Permalink
crypto: api - Increase MAX_ALGAPI_ALIGNMASK to 127
Browse files Browse the repository at this point in the history
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: Herbert Xu <[email protected]>
  • Loading branch information
herbertx committed Dec 2, 2022
1 parent 12658ac commit 1c79957
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 3 deletions.
9 changes: 7 additions & 2 deletions crypto/shash.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@

#include "internal.h"

#define MAX_SHASH_ALIGNMASK 63

static const struct crypto_type crypto_shash_type;

int shash_no_setkey(struct crypto_shash *tfm, const u8 *key,
Expand Down Expand Up @@ -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:
* 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);
int err;

Expand Down Expand Up @@ -130,7 +132,7 @@ static int shash_final_unaligned(struct shash_desc *desc, u8 *out)
* We cannot count on __aligned() working for large values:
* 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);
int err;

Expand Down Expand Up @@ -524,6 +526,9 @@ static int shash_prepare_alg(struct shash_alg *alg)
alg->statesize > HASH_MAX_STATESIZE)
return -EINVAL;

if (base->cra_alignmask > MAX_SHASH_ALIGNMASK)
return -EINVAL;

if ((alg->export && !alg->import) || (alg->import && !alg->export))
return -EINVAL;

Expand Down
2 changes: 1 addition & 1 deletion include/crypto/algapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
* algs and architectures. Ciphers have a lower maximum size.
*/
#define MAX_ALGAPI_BLOCKSIZE 160
#define MAX_ALGAPI_ALIGNMASK 63
#define MAX_ALGAPI_ALIGNMASK 127
#define MAX_CIPHER_BLOCKSIZE 16
#define MAX_CIPHER_ALIGNMASK 15

Expand Down

0 comments on commit 1c79957

Please sign in to comment.