crypto: xcbc - Fix alignment calculation of xcbc_tfm_ctx
PATCH 1/1 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.
--- crypto/xcbc.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-)
crypto/xcbc.c +5 -3
@@ -199,6 +199,7 @@ static int xcbc_create(struct crypto_template *tmpl, struct rtattr **tb) {struct shash_instance *inst;struct crypto_alg *alg; +unsigned long alignmask;int err; err =crypto_check_attr_type (tb,CRYPTO_ALG_TYPE_SHASH );
@@ -228,19 +229,20 @@ static int xcbc_create(struct crypto_template *tmpl, struct rtattr **tb)if (err) goto out_free_inst; + alignmask = alg->cra_alignmask |3 ; + inst->alg.base.cra_alignmask = alignmask; inst->alg.base.cra_priority = alg->cra_priority; inst->alg.base.cra_blocksize = alg->cra_blocksize; - inst->alg.base.cra_alignmask = alg->cra_alignmask |3 ; inst->alg.digestsize = alg->cra_blocksize; inst->alg.descsize =ALIGN (sizeof (struct xcbc_desc_ctx ),crypto_tfm_ctx_alignment ()) + - (alg->cra_alignmask & + (alignmask & ~(crypto_tfm_ctx_alignment () -1 )) + alg->cra_blocksize *2 ; inst->alg.base.cra_ctxsize =ALIGN (sizeof (struct xcbc_tfm_ctx ), - alg->cra_alignmask) + + alignmask +1 ) + alg->cra_blocksize *2 ; inst->alg.base.cra_init = xcbc_init_tfm; inst->alg.base.cra_exit = xcbc_exit_tfm;
Signature · 1 line
1.5.4.2
Herbert Xu
maintainerQuoted 8 lines · Steffen Klassert
The alignment calculation of
xcbc_tfm_ctxusesalg->cra_alignmaskand notalg->cra_alignmask+ 1 as it should. This led to frequent crashes during the selftest of xcbc(aes-asm) onx86_64machines. This patch fixes this. Also we use the alignmask of xcbc and not the alignmask of the underlying algorithm for the alignmnent calculation inxcbc_createnow.Signed-off-by Steffen Klassert <[email protected]>
Good catch!
I wonder why I didn't see it though as I too was testing this on x86-64. Must've been luck I suppose as it depends on what follows the context in memory. Anyway, patch applied to cryptodev-2.6.
Thanks,
Signature · 4 lines
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt