• Christophe Leroy's avatar
    crypto: talitos - fix hash on SEC1. · 58cdbc6d
    Christophe Leroy authored
    On SEC1, hash provides wrong result when performing hashing in several
    steps with input data SG list has more than one element. This was
    detected with CONFIG_CRYPTO_MANAGER_EXTRA_TESTS:
    
    [   44.185947] alg: hash: md5-talitos test failed (wrong result) on test vector 6, cfg="random: may_sleep use_finup src_divs=[<reimport>25.88%@+8063, <flush>24.19%@+9588, 28.63%@+16333, <reimport>4.60%@+6756, 16.70%@+16281] dst_divs=[71.61%@alignmask+16361, 14.36%@+7756, 14.3%@+"
    [   44.325122] alg: hash: sha1-talitos test failed (wrong result) on test vector 3, cfg="random: inplace use_final src_divs=[<flush,nosimd>16.56%@+16378, <reimport>52.0%@+16329, 21.42%@alignmask+16380, 10.2%@alignmask+16380] iv_offset=39"
    [   44.493500] alg: hash: sha224-talitos test failed (wrong result) on test vector 4, cfg="random: use_final nosimd src_divs=[<reimport>52.27%@+7401, <reimport>17.34%@+16285, <flush>17.71%@+26, 12.68%@+10644] iv_offset=43"
    [   44.673262] alg: hash: sha256-talitos test failed (wrong result) on test vector 4, cfg="random: may_sleep use_finup src_divs=[<reimport>60.6%@+12790, 17.86%@+1329, <reimport>12.64%@alignmask+16300, 8.29%@+15, 0.40%@+13506, <reimport>0.51%@+16322, <reimport>0.24%@+16339] dst_divs"
    
    This is due to two issues:
    - We have an overlap between the buffer used for copying the input
    data (SEC1 doesn't do scatter/gather) and the chained descriptor.
    - Data copy is wrong when the previous hash left less than one
    blocksize of data to hash, implying a complement of the previous
    block with a few bytes from the new request.
    
    Fix it by:
    - Moving the second descriptor after the buffer, as moving the buffer
    after the descriptor would make it more complex for other cipher
    operations (AEAD, ABLKCIPHER)
    - Skip the bytes taken from the new request to complete the previous
    one by moving the SG list forward.
    
    Fixes: 37b5e889 ("crypto: talitos - chain in buffered data for ahash on SEC1")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarChristophe Leroy <christophe.leroy@c-s.fr>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    58cdbc6d
talitos.c 102 KB