Commit 36f87a4a29cb8cd291169483079fde34bad4ef16

Authored by Steffen Klassert
Committed by Herbert Xu
1 parent 4e4ed83be6

crypto: xcbc - Fix alignment calculation of xcbc_tfm_ctx

The alignment calculation of xcbc_tfm_ctx uses alg->cra_alignmask
and not alg->cra_alignmask + 1 as it should. This led to frequent
crashes during the selftest of xcbc(aes-asm) on x86_64
machines. This patch fixes this. Also we use the alignmask
of xcbc and not the alignmask of the underlying algorithm
for the alignmnent calculation in xcbc_create now.

Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Showing 1 changed file with 5 additions and 3 deletions Side-by-side Diff

... ... @@ -199,6 +199,7 @@
199 199 {
200 200 struct shash_instance *inst;
201 201 struct crypto_alg *alg;
  202 + unsigned long alignmask;
202 203 int err;
203 204  
204 205 err = crypto_check_attr_type(tb, CRYPTO_ALG_TYPE_SHASH);
205 206  
206 207  
207 208  
... ... @@ -228,19 +229,20 @@
228 229 if (err)
229 230 goto out_free_inst;
230 231  
  232 + alignmask = alg->cra_alignmask | 3;
  233 + inst->alg.base.cra_alignmask = alignmask;
231 234 inst->alg.base.cra_priority = alg->cra_priority;
232 235 inst->alg.base.cra_blocksize = alg->cra_blocksize;
233   - inst->alg.base.cra_alignmask = alg->cra_alignmask | 3;
234 236  
235 237 inst->alg.digestsize = alg->cra_blocksize;
236 238 inst->alg.descsize = ALIGN(sizeof(struct xcbc_desc_ctx),
237 239 crypto_tfm_ctx_alignment()) +
238   - (alg->cra_alignmask &
  240 + (alignmask &
239 241 ~(crypto_tfm_ctx_alignment() - 1)) +
240 242 alg->cra_blocksize * 2;
241 243  
242 244 inst->alg.base.cra_ctxsize = ALIGN(sizeof(struct xcbc_tfm_ctx),
243   - alg->cra_alignmask) +
  245 + alignmask + 1) +
244 246 alg->cra_blocksize * 2;
245 247 inst->alg.base.cra_init = xcbc_init_tfm;
246 248 inst->alg.base.cra_exit = xcbc_exit_tfm;