• Herbert Xu's avatar
    crypto: ahash - Fix EINPROGRESS notification callback · ef0579b6
    Herbert Xu authored
    The ahash API modifies the request's callback function in order
    to clean up after itself in some corner cases (unaligned final
    and missing finup).
    
    When the request is complete ahash will restore the original
    callback and everything is fine.  However, when the request gets
    an EBUSY on a full queue, an EINPROGRESS callback is made while
    the request is still ongoing.
    
    In this case the ahash API will incorrectly call its own callback.
    
    This patch fixes the problem by creating a temporary request
    object on the stack which is used to relay EINPROGRESS back to
    the original completion function.
    
    This patch also adds code to preserve the original flags value.
    
    Fixes: ab6bf4e5 ("crypto: hash - Fix the pointer voodoo in...")
    Cc: <stable@vger.kernel.org>
    Reported-by: default avatarSabrina Dubroca <sd@queasysnail.net>
    Tested-by: default avatarSabrina Dubroca <sd@queasysnail.net>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    ef0579b6
ahash.c 15.1 KB