• Herbert Xu's avatar
    crypto: api - fix unexpectedly getting generic implementation · 2bbb3375
    Herbert Xu authored
    When CONFIG_CRYPTO_MANAGER_EXTRA_TESTS=y, the first lookup of an
    algorithm that needs to be instantiated using a template will always get
    the generic implementation, even when an accelerated one is available.
    
    This happens because the extra self-tests for the accelerated
    implementation allocate the generic implementation for comparison
    purposes, and then crypto_alg_tested() for the generic implementation
    "fulfills" the original request (i.e. sets crypto_larval::adult).
    
    This patch fixes this by only fulfilling the original request if
    we are currently the best outstanding larval as judged by the
    priority.  If we're not the best then we will ask all waiters on
    that larval request to retry the lookup.
    
    Note that this patch introduces a behaviour change when the module
    providing the new algorithm is unregistered during the process.
    Previously we would have failed with ENOENT, after the patch we
    will instead redo the lookup.
    
    Fixes: 9a8a6b3f ("crypto: testmgr - fuzz hashes against...")
    Fixes: d435e10e ("crypto: testmgr - fuzz skciphers against...")
    Fixes: 40153b10 ("crypto: testmgr - fuzz AEADs against...")
    Reported-by: default avatarEric Biggers <ebiggers@google.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    Reviewed-by: default avatarEric Biggers <ebiggers@google.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    2bbb3375
api.c 13.5 KB