aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crypto/hmac.c25
-rw-r--r--crypto/testmgr.c14
-rw-r--r--drivers/crypto/ccp/ccp-crypto-sha.c13
-rw-r--r--drivers/crypto/mv_cesa.c41
-rw-r--r--drivers/crypto/n2_core.c11
-rw-r--r--drivers/crypto/omap-sham.c28
-rw-r--r--drivers/crypto/qat/qat_common/qat_algs.c31
-rw-r--r--drivers/md/dm-crypt.c34
-rw-r--r--fs/btrfs/hash.c16
-rw-r--r--include/crypto/hash.h5
-rw-r--r--lib/libcrc32c.c16
-rw-r--r--security/integrity/ima/ima_crypto.c47
12 files changed, 122 insertions, 159 deletions
diff --git a/crypto/hmac.c b/crypto/hmac.c
index 8d9544cf8169..e392219ddc61 100644
--- a/crypto/hmac.c
+++ b/crypto/hmac.c
@@ -52,20 +52,17 @@ static int hmac_setkey(struct crypto_shash *parent,
52 struct hmac_ctx *ctx = align_ptr(opad + ss, 52 struct hmac_ctx *ctx = align_ptr(opad + ss,
53 crypto_tfm_ctx_alignment()); 53 crypto_tfm_ctx_alignment());
54 struct crypto_shash *hash = ctx->hash; 54 struct crypto_shash *hash = ctx->hash;
55 struct { 55 SHASH_DESC_ON_STACK(shash, hash);
56 struct shash_desc shash;
57 char ctx[crypto_shash_descsize(hash)];
58 } desc;
59 unsigned int i; 56 unsigned int i;
60 57
61 desc.shash.tfm = hash; 58 shash->tfm = hash;
62 desc.shash.flags = crypto_shash_get_flags(parent) & 59 shash->flags = crypto_shash_get_flags(parent)
63 CRYPTO_TFM_REQ_MAY_SLEEP; 60 & CRYPTO_TFM_REQ_MAY_SLEEP;
64 61
65 if (keylen > bs) { 62 if (keylen > bs) {
66 int err; 63 int err;
67 64
68 err = crypto_shash_digest(&desc.shash, inkey, keylen, ipad); 65 err = crypto_shash_digest(shash, inkey, keylen, ipad);
69 if (err) 66 if (err)
70 return err; 67 return err;
71 68
@@ -81,12 +78,12 @@ static int hmac_setkey(struct crypto_shash *parent,
81 opad[i] ^= 0x5c; 78 opad[i] ^= 0x5c;
82 } 79 }
83 80
84 return crypto_shash_init(&desc.shash) ?: 81 return crypto_shash_init(shash) ?:
85 crypto_shash_update(&desc.shash, ipad, bs) ?: 82 crypto_shash_update(shash, ipad, bs) ?:
86 crypto_shash_export(&desc.shash, ipad) ?: 83 crypto_shash_export(shash, ipad) ?:
87 crypto_shash_init(&desc.shash) ?: 84 crypto_shash_init(shash) ?:
88 crypto_shash_update(&desc.shash, opad, bs) ?: 85 crypto_shash_update(shash, opad, bs) ?:
89 crypto_shash_export(&desc.shash, opad); 86 crypto_shash_export(shash, opad);
90} 87}
91 88
92static int hmac_export(struct shash_desc *pdesc, void *out) 89static int hmac_export(struct shash_desc *pdesc, void *out)
diff --git a/crypto/testmgr.c b/crypto/testmgr.c
index 9459dfd7357f..29a0cbdd0d19 100644
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
@@ -1678,16 +1678,14 @@ static int alg_test_crc32c(const struct alg_test_desc *desc,
1678 } 1678 }
1679 1679
1680 do { 1680 do {
1681 struct { 1681 SHASH_DESC_ON_STACK(shash, tfm);
1682 struct shash_desc shash; 1682 u32 *ctx = (u32 *)shash_desc_ctx(shash);
1683 char ctx[crypto_shash_descsize(tfm)];
1684 } sdesc;
1685 1683
1686 sdesc.shash.tfm = tfm; 1684 shash->tfm = tfm;
1687 sdesc.shash.flags = 0; 1685 shash->flags = 0;
1688 1686
1689 *(u32 *)sdesc.ctx = le32_to_cpu(420553207); 1687 *ctx = le32_to_cpu(420553207);
1690 err = crypto_shash_final(&sdesc.shash, (u8 *)&val); 1688 err = crypto_shash_final(shash, (u8 *)&val);
1691 if (err) { 1689 if (err) {
1692 printk(KERN_ERR "alg: crc32c: Operation failed for " 1690 printk(KERN_ERR "alg: crc32c: Operation failed for "
1693 "%s: %d\n", driver, err); 1691 "%s: %d\n", driver, err);
diff --git a/drivers/crypto/ccp/ccp-crypto-sha.c b/drivers/crypto/ccp/ccp-crypto-sha.c
index 873f23425245..96531571f7cf 100644
--- a/drivers/crypto/ccp/ccp-crypto-sha.c
+++ b/drivers/crypto/ccp/ccp-crypto-sha.c
@@ -198,10 +198,9 @@ static int ccp_sha_setkey(struct crypto_ahash *tfm, const u8 *key,
198{ 198{
199 struct ccp_ctx *ctx = crypto_tfm_ctx(crypto_ahash_tfm(tfm)); 199 struct ccp_ctx *ctx = crypto_tfm_ctx(crypto_ahash_tfm(tfm));
200 struct crypto_shash *shash = ctx->u.sha.hmac_tfm; 200 struct crypto_shash *shash = ctx->u.sha.hmac_tfm;
201 struct { 201
202 struct shash_desc sdesc; 202 SHASH_DESC_ON_STACK(sdesc, shash);
203 char ctx[crypto_shash_descsize(shash)]; 203
204 } desc;
205 unsigned int block_size = crypto_shash_blocksize(shash); 204 unsigned int block_size = crypto_shash_blocksize(shash);
206 unsigned int digest_size = crypto_shash_digestsize(shash); 205 unsigned int digest_size = crypto_shash_digestsize(shash);
207 int i, ret; 206 int i, ret;
@@ -216,11 +215,11 @@ static int ccp_sha_setkey(struct crypto_ahash *tfm, const u8 *key,
216 215
217 if (key_len > block_size) { 216 if (key_len > block_size) {
218 /* Must hash the input key */ 217 /* Must hash the input key */
219 desc.sdesc.tfm = shash; 218 sdesc->tfm = shash;
220 desc.sdesc.flags = crypto_ahash_get_flags(tfm) & 219 sdesc->flags = crypto_ahash_get_flags(tfm) &
221 CRYPTO_TFM_REQ_MAY_SLEEP; 220 CRYPTO_TFM_REQ_MAY_SLEEP;
222 221
223 ret = crypto_shash_digest(&desc.sdesc, key, key_len, 222 ret = crypto_shash_digest(sdesc, key, key_len,
224 ctx->u.sha.key); 223 ctx->u.sha.key);
225 if (ret) { 224 if (ret) {
226 crypto_ahash_set_flags(tfm, CRYPTO_TFM_RES_BAD_KEY_LEN); 225 crypto_ahash_set_flags(tfm, CRYPTO_TFM_RES_BAD_KEY_LEN);
diff --git a/drivers/crypto/mv_cesa.c b/drivers/crypto/mv_cesa.c
index 29d0ee504907..032c72c1f953 100644
--- a/drivers/crypto/mv_cesa.c
+++ b/drivers/crypto/mv_cesa.c
@@ -402,26 +402,23 @@ static int mv_hash_final_fallback(struct ahash_request *req)
402{ 402{
403 const struct mv_tfm_hash_ctx *tfm_ctx = crypto_tfm_ctx(req->base.tfm); 403 const struct mv_tfm_hash_ctx *tfm_ctx = crypto_tfm_ctx(req->base.tfm);
404 struct mv_req_hash_ctx *req_ctx = ahash_request_ctx(req); 404 struct mv_req_hash_ctx *req_ctx = ahash_request_ctx(req);
405 struct { 405 SHASH_DESC_ON_STACK(shash, tfm_ctx->fallback);
406 struct shash_desc shash;
407 char ctx[crypto_shash_descsize(tfm_ctx->fallback)];
408 } desc;
409 int rc; 406 int rc;
410 407
411 desc.shash.tfm = tfm_ctx->fallback; 408 shash->tfm = tfm_ctx->fallback;
412 desc.shash.flags = CRYPTO_TFM_REQ_MAY_SLEEP; 409 shash->flags = CRYPTO_TFM_REQ_MAY_SLEEP;
413 if (unlikely(req_ctx->first_hash)) { 410 if (unlikely(req_ctx->first_hash)) {
414 crypto_shash_init(&desc.shash); 411 crypto_shash_init(shash);
415 crypto_shash_update(&desc.shash, req_ctx->buffer, 412 crypto_shash_update(shash, req_ctx->buffer,
416 req_ctx->extra_bytes); 413 req_ctx->extra_bytes);
417 } else { 414 } else {
418 /* only SHA1 for now.... 415 /* only SHA1 for now....
419 */ 416 */
420 rc = mv_hash_import_sha1_ctx(req_ctx, &desc.shash); 417 rc = mv_hash_import_sha1_ctx(req_ctx, shash);
421 if (rc) 418 if (rc)
422 goto out; 419 goto out;
423 } 420 }
424 rc = crypto_shash_final(&desc.shash, req->result); 421 rc = crypto_shash_final(shash, req->result);
425out: 422out:
426 return rc; 423 return rc;
427} 424}
@@ -794,23 +791,21 @@ static int mv_hash_setkey(struct crypto_ahash *tfm, const u8 * key,
794 ss = crypto_shash_statesize(ctx->base_hash); 791 ss = crypto_shash_statesize(ctx->base_hash);
795 792
796 { 793 {
797 struct { 794 SHASH_DESC_ON_STACK(shash, ctx->base_hash);
798 struct shash_desc shash; 795
799 char ctx[crypto_shash_descsize(ctx->base_hash)];
800 } desc;
801 unsigned int i; 796 unsigned int i;
802 char ipad[ss]; 797 char ipad[ss];
803 char opad[ss]; 798 char opad[ss];
804 799
805 desc.shash.tfm = ctx->base_hash; 800 shash->tfm = ctx->base_hash;
806 desc.shash.flags = crypto_shash_get_flags(ctx->base_hash) & 801 shash->flags = crypto_shash_get_flags(ctx->base_hash) &
807 CRYPTO_TFM_REQ_MAY_SLEEP; 802 CRYPTO_TFM_REQ_MAY_SLEEP;
808 803
809 if (keylen > bs) { 804 if (keylen > bs) {
810 int err; 805 int err;
811 806
812 err = 807 err =
813 crypto_shash_digest(&desc.shash, key, keylen, ipad); 808 crypto_shash_digest(shash, key, keylen, ipad);
814 if (err) 809 if (err)
815 return err; 810 return err;
816 811
@@ -826,12 +821,12 @@ static int mv_hash_setkey(struct crypto_ahash *tfm, const u8 * key,
826 opad[i] ^= 0x5c; 821 opad[i] ^= 0x5c;
827 } 822 }
828 823
829 rc = crypto_shash_init(&desc.shash) ? : 824 rc = crypto_shash_init(shash) ? :
830 crypto_shash_update(&desc.shash, ipad, bs) ? : 825 crypto_shash_update(shash, ipad, bs) ? :
831 crypto_shash_export(&desc.shash, ipad) ? : 826 crypto_shash_export(shash, ipad) ? :
832 crypto_shash_init(&desc.shash) ? : 827 crypto_shash_init(shash) ? :
833 crypto_shash_update(&desc.shash, opad, bs) ? : 828 crypto_shash_update(shash, opad, bs) ? :
834 crypto_shash_export(&desc.shash, opad); 829 crypto_shash_export(shash, opad);
835 830
836 if (rc == 0) 831 if (rc == 0)
837 mv_hash_init_ivs(ctx, ipad, opad); 832 mv_hash_init_ivs(ctx, ipad, opad);
diff --git a/drivers/crypto/n2_core.c b/drivers/crypto/n2_core.c
index 7263c10a56ee..f8e3207fecb1 100644
--- a/drivers/crypto/n2_core.c
+++ b/drivers/crypto/n2_core.c
@@ -445,10 +445,7 @@ static int n2_hmac_async_setkey(struct crypto_ahash *tfm, const u8 *key,
445 struct n2_hmac_ctx *ctx = crypto_ahash_ctx(tfm); 445 struct n2_hmac_ctx *ctx = crypto_ahash_ctx(tfm);
446 struct crypto_shash *child_shash = ctx->child_shash; 446 struct crypto_shash *child_shash = ctx->child_shash;
447 struct crypto_ahash *fallback_tfm; 447 struct crypto_ahash *fallback_tfm;
448 struct { 448 SHASH_DESC_ON_STACK(shash, child_shash);
449 struct shash_desc shash;
450 char ctx[crypto_shash_descsize(child_shash)];
451 } desc;
452 int err, bs, ds; 449 int err, bs, ds;
453 450
454 fallback_tfm = ctx->base.fallback_tfm; 451 fallback_tfm = ctx->base.fallback_tfm;
@@ -456,15 +453,15 @@ static int n2_hmac_async_setkey(struct crypto_ahash *tfm, const u8 *key,
456 if (err) 453 if (err)
457 return err; 454 return err;
458 455
459 desc.shash.tfm = child_shash; 456 shash->tfm = child_shash;
460 desc.shash.flags = crypto_ahash_get_flags(tfm) & 457 shash->flags = crypto_ahash_get_flags(tfm) &
461 CRYPTO_TFM_REQ_MAY_SLEEP; 458 CRYPTO_TFM_REQ_MAY_SLEEP;
462 459
463 bs = crypto_shash_blocksize(child_shash); 460 bs = crypto_shash_blocksize(child_shash);
464 ds = crypto_shash_digestsize(child_shash); 461 ds = crypto_shash_digestsize(child_shash);
465 BUG_ON(ds > N2_HASH_KEY_MAX); 462 BUG_ON(ds > N2_HASH_KEY_MAX);
466 if (keylen > bs) { 463 if (keylen > bs) {
467 err = crypto_shash_digest(&desc.shash, key, keylen, 464 err = crypto_shash_digest(shash, key, keylen,
468 ctx->hash_key); 465 ctx->hash_key);
469 if (err) 466 if (err)
470 return err; 467 return err;
diff --git a/drivers/crypto/omap-sham.c b/drivers/crypto/omap-sham.c
index 710d86386965..24ef48965e45 100644
--- a/drivers/crypto/omap-sham.c
+++ b/drivers/crypto/omap-sham.c
@@ -949,17 +949,14 @@ static int omap_sham_finish_hmac(struct ahash_request *req)
949 struct omap_sham_hmac_ctx *bctx = tctx->base; 949 struct omap_sham_hmac_ctx *bctx = tctx->base;
950 int bs = crypto_shash_blocksize(bctx->shash); 950 int bs = crypto_shash_blocksize(bctx->shash);
951 int ds = crypto_shash_digestsize(bctx->shash); 951 int ds = crypto_shash_digestsize(bctx->shash);
952 struct { 952 SHASH_DESC_ON_STACK(shash, bctx->shash);
953 struct shash_desc shash;
954 char ctx[crypto_shash_descsize(bctx->shash)];
955 } desc;
956 953
957 desc.shash.tfm = bctx->shash; 954 shash->tfm = bctx->shash;
958 desc.shash.flags = 0; /* not CRYPTO_TFM_REQ_MAY_SLEEP */ 955 shash->flags = 0; /* not CRYPTO_TFM_REQ_MAY_SLEEP */
959 956
960 return crypto_shash_init(&desc.shash) ?: 957 return crypto_shash_init(shash) ?:
961 crypto_shash_update(&desc.shash, bctx->opad, bs) ?: 958 crypto_shash_update(shash, bctx->opad, bs) ?:
962 crypto_shash_finup(&desc.shash, req->result, ds, req->result); 959 crypto_shash_finup(shash, req->result, ds, req->result);
963} 960}
964 961
965static int omap_sham_finish(struct ahash_request *req) 962static int omap_sham_finish(struct ahash_request *req)
@@ -1118,18 +1115,15 @@ static int omap_sham_update(struct ahash_request *req)
1118 return omap_sham_enqueue(req, OP_UPDATE); 1115 return omap_sham_enqueue(req, OP_UPDATE);
1119} 1116}
1120 1117
1121static int omap_sham_shash_digest(struct crypto_shash *shash, u32 flags, 1118static int omap_sham_shash_digest(struct crypto_shash *tfm, u32 flags,
1122 const u8 *data, unsigned int len, u8 *out) 1119 const u8 *data, unsigned int len, u8 *out)
1123{ 1120{
1124 struct { 1121 SHASH_DESC_ON_STACK(shash, tfm);
1125 struct shash_desc shash;
1126 char ctx[crypto_shash_descsize(shash)];
1127 } desc;
1128 1122
1129 desc.shash.tfm = shash; 1123 shash->tfm = tfm;
1130 desc.shash.flags = flags & CRYPTO_TFM_REQ_MAY_SLEEP; 1124 shash->flags = flags & CRYPTO_TFM_REQ_MAY_SLEEP;
1131 1125
1132 return crypto_shash_digest(&desc.shash, data, len, out); 1126 return crypto_shash_digest(shash, data, len, out);
1133} 1127}
1134 1128
1135static int omap_sham_final_shash(struct ahash_request *req) 1129static int omap_sham_final_shash(struct ahash_request *req)
diff --git a/drivers/crypto/qat/qat_common/qat_algs.c b/drivers/crypto/qat/qat_common/qat_algs.c
index 3e26fa2b293f..f2e2f158cfbe 100644
--- a/drivers/crypto/qat/qat_common/qat_algs.c
+++ b/drivers/crypto/qat/qat_common/qat_algs.c
@@ -149,10 +149,7 @@ static int qat_alg_do_precomputes(struct icp_qat_hw_auth_algo_blk *hash,
149 unsigned int auth_keylen) 149 unsigned int auth_keylen)
150{ 150{
151 struct qat_auth_state auth_state; 151 struct qat_auth_state auth_state;
152 struct { 152 SHASH_DESC_ON_STACK(shash, ctx->hash_tfm);
153 struct shash_desc shash;
154 char ctx[crypto_shash_descsize(ctx->hash_tfm)];
155 } desc;
156 struct sha1_state sha1; 153 struct sha1_state sha1;
157 struct sha256_state sha256; 154 struct sha256_state sha256;
158 struct sha512_state sha512; 155 struct sha512_state sha512;
@@ -165,12 +162,12 @@ static int qat_alg_do_precomputes(struct icp_qat_hw_auth_algo_blk *hash,
165 int i, offset; 162 int i, offset;
166 163
167 memset(auth_state.data, '\0', MAX_AUTH_STATE_SIZE + 64); 164 memset(auth_state.data, '\0', MAX_AUTH_STATE_SIZE + 64);
168 desc.shash.tfm = ctx->hash_tfm; 165 shash->tfm = ctx->hash_tfm;
169 desc.shash.flags = 0x0; 166 shash->flags = 0x0;
170 167
171 if (auth_keylen > block_size) { 168 if (auth_keylen > block_size) {
172 char buff[SHA512_BLOCK_SIZE]; 169 char buff[SHA512_BLOCK_SIZE];
173 int ret = crypto_shash_digest(&desc.shash, auth_key, 170 int ret = crypto_shash_digest(shash, auth_key,
174 auth_keylen, buff); 171 auth_keylen, buff);
175 if (ret) 172 if (ret)
176 return ret; 173 return ret;
@@ -193,10 +190,10 @@ static int qat_alg_do_precomputes(struct icp_qat_hw_auth_algo_blk *hash,
193 *opad_ptr ^= 0x5C; 190 *opad_ptr ^= 0x5C;
194 } 191 }
195 192
196 if (crypto_shash_init(&desc.shash)) 193 if (crypto_shash_init(shash))
197 return -EFAULT; 194 return -EFAULT;
198 195
199 if (crypto_shash_update(&desc.shash, ipad, block_size)) 196 if (crypto_shash_update(shash, ipad, block_size))
200 return -EFAULT; 197 return -EFAULT;
201 198
202 hash_state_out = (__be32 *)hash->sha.state1; 199 hash_state_out = (__be32 *)hash->sha.state1;
@@ -204,19 +201,19 @@ static int qat_alg_do_precomputes(struct icp_qat_hw_auth_algo_blk *hash,
204 201
205 switch (ctx->qat_hash_alg) { 202 switch (ctx->qat_hash_alg) {
206 case ICP_QAT_HW_AUTH_ALGO_SHA1: 203 case ICP_QAT_HW_AUTH_ALGO_SHA1:
207 if (crypto_shash_export(&desc.shash, &sha1)) 204 if (crypto_shash_export(shash, &sha1))
208 return -EFAULT; 205 return -EFAULT;
209 for (i = 0; i < digest_size >> 2; i++, hash_state_out++) 206 for (i = 0; i < digest_size >> 2; i++, hash_state_out++)
210 *hash_state_out = cpu_to_be32(*(sha1.state + i)); 207 *hash_state_out = cpu_to_be32(*(sha1.state + i));
211 break; 208 break;
212 case ICP_QAT_HW_AUTH_ALGO_SHA256: 209 case ICP_QAT_HW_AUTH_ALGO_SHA256:
213 if (crypto_shash_export(&desc.shash, &sha256)) 210 if (crypto_shash_export(shash, &sha256))
214 return -EFAULT; 211 return -EFAULT;
215 for (i = 0; i < digest_size >> 2; i++, hash_state_out++) 212 for (i = 0; i < digest_size >> 2; i++, hash_state_out++)
216 *hash_state_out = cpu_to_be32(*(sha256.state + i)); 213 *hash_state_out = cpu_to_be32(*(sha256.state + i));
217 break; 214 break;
218 case ICP_QAT_HW_AUTH_ALGO_SHA512: 215 case ICP_QAT_HW_AUTH_ALGO_SHA512:
219 if (crypto_shash_export(&desc.shash, &sha512)) 216 if (crypto_shash_export(shash, &sha512))
220 return -EFAULT; 217 return -EFAULT;
221 for (i = 0; i < digest_size >> 3; i++, hash512_state_out++) 218 for (i = 0; i < digest_size >> 3; i++, hash512_state_out++)
222 *hash512_state_out = cpu_to_be64(*(sha512.state + i)); 219 *hash512_state_out = cpu_to_be64(*(sha512.state + i));
@@ -225,10 +222,10 @@ static int qat_alg_do_precomputes(struct icp_qat_hw_auth_algo_blk *hash,
225 return -EFAULT; 222 return -EFAULT;
226 } 223 }
227 224
228 if (crypto_shash_init(&desc.shash)) 225 if (crypto_shash_init(shash))
229 return -EFAULT; 226 return -EFAULT;
230 227
231 if (crypto_shash_update(&desc.shash, opad, block_size)) 228 if (crypto_shash_update(shash, opad, block_size))
232 return -EFAULT; 229 return -EFAULT;
233 230
234 offset = round_up(qat_get_inter_state_size(ctx->qat_hash_alg), 8); 231 offset = round_up(qat_get_inter_state_size(ctx->qat_hash_alg), 8);
@@ -237,19 +234,19 @@ static int qat_alg_do_precomputes(struct icp_qat_hw_auth_algo_blk *hash,
237 234
238 switch (ctx->qat_hash_alg) { 235 switch (ctx->qat_hash_alg) {
239 case ICP_QAT_HW_AUTH_ALGO_SHA1: 236 case ICP_QAT_HW_AUTH_ALGO_SHA1:
240 if (crypto_shash_export(&desc.shash, &sha1)) 237 if (crypto_shash_export(shash, &sha1))
241 return -EFAULT; 238 return -EFAULT;
242 for (i = 0; i < digest_size >> 2; i++, hash_state_out++) 239 for (i = 0; i < digest_size >> 2; i++, hash_state_out++)
243 *hash_state_out = cpu_to_be32(*(sha1.state + i)); 240 *hash_state_out = cpu_to_be32(*(sha1.state + i));
244 break; 241 break;
245 case ICP_QAT_HW_AUTH_ALGO_SHA256: 242 case ICP_QAT_HW_AUTH_ALGO_SHA256:
246 if (crypto_shash_export(&desc.shash, &sha256)) 243 if (crypto_shash_export(shash, &sha256))
247 return -EFAULT; 244 return -EFAULT;
248 for (i = 0; i < digest_size >> 2; i++, hash_state_out++) 245 for (i = 0; i < digest_size >> 2; i++, hash_state_out++)
249 *hash_state_out = cpu_to_be32(*(sha256.state + i)); 246 *hash_state_out = cpu_to_be32(*(sha256.state + i));
250 break; 247 break;
251 case ICP_QAT_HW_AUTH_ALGO_SHA512: 248 case ICP_QAT_HW_AUTH_ALGO_SHA512:
252 if (crypto_shash_export(&desc.shash, &sha512)) 249 if (crypto_shash_export(shash, &sha512))
253 return -EFAULT; 250 return -EFAULT;
254 for (i = 0; i < digest_size >> 3; i++, hash512_state_out++) 251 for (i = 0; i < digest_size >> 3; i++, hash512_state_out++)
255 *hash512_state_out = cpu_to_be64(*(sha512.state + i)); 252 *hash512_state_out = cpu_to_be64(*(sha512.state + i));
diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
index cd15e0801228..fc93b9330af4 100644
--- a/drivers/md/dm-crypt.c
+++ b/drivers/md/dm-crypt.c
@@ -526,29 +526,26 @@ static int crypt_iv_lmk_one(struct crypt_config *cc, u8 *iv,
526 u8 *data) 526 u8 *data)
527{ 527{
528 struct iv_lmk_private *lmk = &cc->iv_gen_private.lmk; 528 struct iv_lmk_private *lmk = &cc->iv_gen_private.lmk;
529 struct { 529 SHASH_DESC_ON_STACK(desc, lmk->hash_tfm);
530 struct shash_desc desc;
531 char ctx[crypto_shash_descsize(lmk->hash_tfm)];
532 } sdesc;
533 struct md5_state md5state; 530 struct md5_state md5state;
534 __le32 buf[4]; 531 __le32 buf[4];
535 int i, r; 532 int i, r;
536 533
537 sdesc.desc.tfm = lmk->hash_tfm; 534 desc->tfm = lmk->hash_tfm;
538 sdesc.desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP; 535 desc->flags = CRYPTO_TFM_REQ_MAY_SLEEP;
539 536
540 r = crypto_shash_init(&sdesc.desc); 537 r = crypto_shash_init(desc);
541 if (r) 538 if (r)
542 return r; 539 return r;
543 540
544 if (lmk->seed) { 541 if (lmk->seed) {
545 r = crypto_shash_update(&sdesc.desc, lmk->seed, LMK_SEED_SIZE); 542 r = crypto_shash_update(desc, lmk->seed, LMK_SEED_SIZE);
546 if (r) 543 if (r)
547 return r; 544 return r;
548 } 545 }
549 546
550 /* Sector is always 512B, block size 16, add data of blocks 1-31 */ 547 /* Sector is always 512B, block size 16, add data of blocks 1-31 */
551 r = crypto_shash_update(&sdesc.desc, data + 16, 16 * 31); 548 r = crypto_shash_update(desc, data + 16, 16 * 31);
552 if (r) 549 if (r)
553 return r; 550 return r;
554 551
@@ -557,12 +554,12 @@ static int crypt_iv_lmk_one(struct crypt_config *cc, u8 *iv,
557 buf[1] = cpu_to_le32((((u64)dmreq->iv_sector >> 32) & 0x00FFFFFF) | 0x80000000); 554 buf[1] = cpu_to_le32((((u64)dmreq->iv_sector >> 32) & 0x00FFFFFF) | 0x80000000);
558 buf[2] = cpu_to_le32(4024); 555 buf[2] = cpu_to_le32(4024);
559 buf[3] = 0; 556 buf[3] = 0;
560 r = crypto_shash_update(&sdesc.desc, (u8 *)buf, sizeof(buf)); 557 r = crypto_shash_update(desc, (u8 *)buf, sizeof(buf));
561 if (r) 558 if (r)
562 return r; 559 return r;
563 560
564 /* No MD5 padding here */ 561 /* No MD5 padding here */
565 r = crypto_shash_export(&sdesc.desc, &md5state); 562 r = crypto_shash_export(desc, &md5state);
566 if (r) 563 if (r)
567 return r; 564 return r;
568 565
@@ -679,10 +676,7 @@ static int crypt_iv_tcw_whitening(struct crypt_config *cc,
679 struct iv_tcw_private *tcw = &cc->iv_gen_private.tcw; 676 struct iv_tcw_private *tcw = &cc->iv_gen_private.tcw;
680 u64 sector = cpu_to_le64((u64)dmreq->iv_sector); 677 u64 sector = cpu_to_le64((u64)dmreq->iv_sector);
681 u8 buf[TCW_WHITENING_SIZE]; 678 u8 buf[TCW_WHITENING_SIZE];
682 struct { 679 SHASH_DESC_ON_STACK(desc, tcw->crc32_tfm);
683 struct shash_desc desc;
684 char ctx[crypto_shash_descsize(tcw->crc32_tfm)];
685 } sdesc;
686 int i, r; 680 int i, r;
687 681
688 /* xor whitening with sector number */ 682 /* xor whitening with sector number */
@@ -691,16 +685,16 @@ static int crypt_iv_tcw_whitening(struct crypt_config *cc,
691 crypto_xor(&buf[8], (u8 *)&sector, 8); 685 crypto_xor(&buf[8], (u8 *)&sector, 8);
692 686
693 /* calculate crc32 for every 32bit part and xor it */ 687 /* calculate crc32 for every 32bit part and xor it */
694 sdesc.desc.tfm = tcw->crc32_tfm; 688 desc->tfm = tcw->crc32_tfm;
695 sdesc.desc.flags = CRYPTO_TFM_REQ_MAY_SLEEP; 689 desc->flags = CRYPTO_TFM_REQ_MAY_SLEEP;
696 for (i = 0; i < 4; i++) { 690 for (i = 0; i < 4; i++) {
697 r = crypto_shash_init(&sdesc.desc); 691 r = crypto_shash_init(desc);
698 if (r) 692 if (r)
699 goto out; 693 goto out;
700 r = crypto_shash_update(&sdesc.desc, &buf[i * 4], 4); 694 r = crypto_shash_update(desc, &buf[i * 4], 4);
701 if (r) 695 if (r)
702 goto out; 696 goto out;
703 r = crypto_shash_final(&sdesc.desc, &buf[i * 4]); 697 r = crypto_shash_final(desc, &buf[i * 4]);
704 if (r) 698 if (r)
705 goto out; 699 goto out;
706 } 700 }
diff --git a/fs/btrfs/hash.c b/fs/btrfs/hash.c
index 64f15bb30a81..aae520b2aee5 100644
--- a/fs/btrfs/hash.c
+++ b/fs/btrfs/hash.c
@@ -31,18 +31,16 @@ void btrfs_hash_exit(void)
31 31
32u32 btrfs_crc32c(u32 crc, const void *address, unsigned int length) 32u32 btrfs_crc32c(u32 crc, const void *address, unsigned int length)
33{ 33{
34 struct { 34 SHASH_DESC_ON_STACK(shash, tfm);
35 struct shash_desc shash; 35 u32 *ctx = (u32 *)shash_desc_ctx(shash);
36 char ctx[crypto_shash_descsize(tfm)];
37 } desc;
38 int err; 36 int err;
39 37
40 desc.shash.tfm = tfm; 38 shash->tfm = tfm;
41 desc.shash.flags = 0; 39 shash->flags = 0;
42 *(u32 *)desc.ctx = crc; 40 *ctx = crc;
43 41
44 err = crypto_shash_update(&desc.shash, address, length); 42 err = crypto_shash_update(shash, address, length);
45 BUG_ON(err); 43 BUG_ON(err);
46 44
47 return *(u32 *)desc.ctx; 45 return *ctx;
48} 46}
diff --git a/include/crypto/hash.h b/include/crypto/hash.h
index a39195539601..74b13ec1ebd4 100644
--- a/include/crypto/hash.h
+++ b/include/crypto/hash.h
@@ -58,6 +58,11 @@ struct shash_desc {
58 void *__ctx[] CRYPTO_MINALIGN_ATTR; 58 void *__ctx[] CRYPTO_MINALIGN_ATTR;
59}; 59};
60 60
61#define SHASH_DESC_ON_STACK(shash, ctx) \
62 char __##shash##_desc[sizeof(struct shash_desc) + \
63 crypto_shash_descsize(ctx)] CRYPTO_MINALIGN_ATTR; \
64 struct shash_desc *shash = (struct shash_desc *)__##shash##_desc
65
61struct shash_alg { 66struct shash_alg {
62 int (*init)(struct shash_desc *desc); 67 int (*init)(struct shash_desc *desc);
63 int (*update)(struct shash_desc *desc, const u8 *data, 68 int (*update)(struct shash_desc *desc, const u8 *data,
diff --git a/lib/libcrc32c.c b/lib/libcrc32c.c
index b3131f5cf8a2..6a08ce7d6adc 100644
--- a/lib/libcrc32c.c
+++ b/lib/libcrc32c.c
@@ -41,20 +41,18 @@ static struct crypto_shash *tfm;
41 41
42u32 crc32c(u32 crc, const void *address, unsigned int length) 42u32 crc32c(u32 crc, const void *address, unsigned int length)
43{ 43{
44 struct { 44 SHASH_DESC_ON_STACK(shash, tfm);
45 struct shash_desc shash; 45 u32 *ctx = (u32 *)shash_desc_ctx(shash);
46 char ctx[crypto_shash_descsize(tfm)];
47 } desc;
48 int err; 46 int err;
49 47
50 desc.shash.tfm = tfm; 48 shash->tfm = tfm;
51 desc.shash.flags = 0; 49 shash->flags = 0;
52 *(u32 *)desc.ctx = crc; 50 *ctx = crc;
53 51
54 err = crypto_shash_update(&desc.shash, address, length); 52 err = crypto_shash_update(shash, address, length);
55 BUG_ON(err); 53 BUG_ON(err);
56 54
57 return *(u32 *)desc.ctx; 55 return *ctx;
58} 56}
59 57
60EXPORT_SYMBOL(crc32c); 58EXPORT_SYMBOL(crc32c);
diff --git a/security/integrity/ima/ima_crypto.c b/security/integrity/ima/ima_crypto.c
index d34e7dfc1118..78d66dae15f4 100644
--- a/security/integrity/ima/ima_crypto.c
+++ b/security/integrity/ima/ima_crypto.c
@@ -386,17 +386,14 @@ static int ima_calc_file_hash_tfm(struct file *file,
386 loff_t i_size, offset = 0; 386 loff_t i_size, offset = 0;
387 char *rbuf; 387 char *rbuf;
388 int rc, read = 0; 388 int rc, read = 0;
389 struct { 389 SHASH_DESC_ON_STACK(shash, tfm);
390 struct shash_desc shash;
391 char ctx[crypto_shash_descsize(tfm)];
392 } desc;
393 390
394 desc.shash.tfm = tfm; 391 shash->tfm = tfm;
395 desc.shash.flags = 0; 392 shash->flags = 0;
396 393
397 hash->length = crypto_shash_digestsize(tfm); 394 hash->length = crypto_shash_digestsize(tfm);
398 395
399 rc = crypto_shash_init(&desc.shash); 396 rc = crypto_shash_init(shash);
400 if (rc != 0) 397 if (rc != 0)
401 return rc; 398 return rc;
402 399
@@ -426,7 +423,7 @@ static int ima_calc_file_hash_tfm(struct file *file,
426 break; 423 break;
427 offset += rbuf_len; 424 offset += rbuf_len;
428 425
429 rc = crypto_shash_update(&desc.shash, rbuf, rbuf_len); 426 rc = crypto_shash_update(shash, rbuf, rbuf_len);
430 if (rc) 427 if (rc)
431 break; 428 break;
432 } 429 }
@@ -435,7 +432,7 @@ static int ima_calc_file_hash_tfm(struct file *file,
435 kfree(rbuf); 432 kfree(rbuf);
436out: 433out:
437 if (!rc) 434 if (!rc)
438 rc = crypto_shash_final(&desc.shash, hash->digest); 435 rc = crypto_shash_final(shash, hash->digest);
439 return rc; 436 return rc;
440} 437}
441 438
@@ -493,18 +490,15 @@ static int ima_calc_field_array_hash_tfm(struct ima_field_data *field_data,
493 struct ima_digest_data *hash, 490 struct ima_digest_data *hash,
494 struct crypto_shash *tfm) 491 struct crypto_shash *tfm)
495{ 492{
496 struct { 493 SHASH_DESC_ON_STACK(shash, tfm);
497 struct shash_desc shash;
498 char ctx[crypto_shash_descsize(tfm)];
499 } desc;
500 int rc, i; 494 int rc, i;
501 495
502 desc.shash.tfm = tfm; 496 shash->tfm = tfm;
503 desc.shash.flags = 0; 497 shash->flags = 0;
504 498
505 hash->length = crypto_shash_digestsize(tfm); 499 hash->length = crypto_shash_digestsize(tfm);
506 500
507 rc = crypto_shash_init(&desc.shash); 501 rc = crypto_shash_init(shash);
508 if (rc != 0) 502 if (rc != 0)
509 return rc; 503 return rc;
510 504
@@ -514,7 +508,7 @@ static int ima_calc_field_array_hash_tfm(struct ima_field_data *field_data,
514 u32 datalen = field_data[i].len; 508 u32 datalen = field_data[i].len;
515 509
516 if (strcmp(td->name, IMA_TEMPLATE_IMA_NAME) != 0) { 510 if (strcmp(td->name, IMA_TEMPLATE_IMA_NAME) != 0) {
517 rc = crypto_shash_update(&desc.shash, 511 rc = crypto_shash_update(shash,
518 (const u8 *) &field_data[i].len, 512 (const u8 *) &field_data[i].len,
519 sizeof(field_data[i].len)); 513 sizeof(field_data[i].len));
520 if (rc) 514 if (rc)
@@ -524,13 +518,13 @@ static int ima_calc_field_array_hash_tfm(struct ima_field_data *field_data,
524 data_to_hash = buffer; 518 data_to_hash = buffer;
525 datalen = IMA_EVENT_NAME_LEN_MAX + 1; 519 datalen = IMA_EVENT_NAME_LEN_MAX + 1;
526 } 520 }
527 rc = crypto_shash_update(&desc.shash, data_to_hash, datalen); 521 rc = crypto_shash_update(shash, data_to_hash, datalen);
528 if (rc) 522 if (rc)
529 break; 523 break;
530 } 524 }
531 525
532 if (!rc) 526 if (!rc)
533 rc = crypto_shash_final(&desc.shash, hash->digest); 527 rc = crypto_shash_final(shash, hash->digest);
534 528
535 return rc; 529 return rc;
536} 530}
@@ -571,15 +565,12 @@ static int __init ima_calc_boot_aggregate_tfm(char *digest,
571{ 565{
572 u8 pcr_i[TPM_DIGEST_SIZE]; 566 u8 pcr_i[TPM_DIGEST_SIZE];
573 int rc, i; 567 int rc, i;
574 struct { 568 SHASH_DESC_ON_STACK(shash, tfm);
575 struct shash_desc shash;
576 char ctx[crypto_shash_descsize(tfm)];
577 } desc;
578 569
579 desc.shash.tfm = tfm; 570 shash->tfm = tfm;
580 desc.shash.flags = 0; 571 shash->flags = 0;
581 572
582 rc = crypto_shash_init(&desc.shash); 573 rc = crypto_shash_init(shash);
583 if (rc != 0) 574 if (rc != 0)
584 return rc; 575 return rc;
585 576
@@ -587,10 +578,10 @@ static int __init ima_calc_boot_aggregate_tfm(char *digest,
587 for (i = TPM_PCR0; i < TPM_PCR8; i++) { 578 for (i = TPM_PCR0; i < TPM_PCR8; i++) {
588 ima_pcrread(i, pcr_i); 579 ima_pcrread(i, pcr_i);
589 /* now accumulate with current aggregate */ 580 /* now accumulate with current aggregate */
590 rc = crypto_shash_update(&desc.shash, pcr_i, TPM_DIGEST_SIZE); 581 rc = crypto_shash_update(shash, pcr_i, TPM_DIGEST_SIZE);
591 } 582 }
592 if (!rc) 583 if (!rc)
593 crypto_shash_final(&desc.shash, digest); 584 crypto_shash_final(shash, digest);
594 return rc; 585 return rc;
595} 586}
596 587