• Antoine Tenart's avatar
    crypto: inside-secure - fix the invalidation step during cra_exit · b7007dbc
    Antoine Tenart authored
    When exiting a transformation, the cra_exit() helper is called in each
    driver providing one. The Inside Secure SafeXcel driver has one, which
    is responsible of freeing some areas and of sending one invalidation
    request to the crypto engine, to invalidate the context that was used
    during the transformation.
    
    We could see in some setups (when lots of transformations were being
    used with a short lifetime, and hence lots of cra_exit() calls) NULL
    pointer dereferences and other weird issues. All these issues were
    coming from accessing the tfm context.
    
    The issue is the invalidation request completion is checked using a
    wait_for_completion_interruptible() call in both the cipher and hash
    cra_exit() helpers. In some cases this was interrupted while the
    invalidation request wasn't processed yet. And then cra_exit() returned,
    and its caller was freeing the tfm instance. Only then the request was
    being handled by the SafeXcel driver, which lead to the said issues.
    
    This patch fixes this by using wait_for_completion() calls in these
    specific cases.
    
    Fixes: 1b44c5a6 ("crypto: inside-secure - add SafeXcel EIP197 crypto engine driver")
    Signed-off-by: default avatarAntoine Tenart <antoine.tenart@bootlin.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    b7007dbc
safexcel_hash.c 29.5 KB