• Eric Biggers's avatar
    crypto: lrw - don't access already-freed walk.iv · 8c07b960
    Eric Biggers authored
    commit aec286cd upstream.
    
    If the user-provided IV needs to be aligned to the algorithm's
    alignmask, then skcipher_walk_virt() copies the IV into a new aligned
    buffer walk.iv.  But skcipher_walk_virt() can fail afterwards, and then
    if the caller unconditionally accesses walk.iv, it's a use-after-free.
    
    Fix this in the LRW template by checking the return value of
    skcipher_walk_virt().
    
    This bug was detected by my patches that improve testmgr to fuzz
    algorithms against their generic implementation.  When the extra
    self-tests were run on a KASAN-enabled kernel, a KASAN use-after-free
    splat occured during lrw(aes) testing.
    
    Fixes: c778f96b ("crypto: lrw - Optimize tweak computation")
    Cc: <stable@vger.kernel.org> # v4.20+
    Cc: Ondrej Mosnacek <omosnace@redhat.com>
    Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    8c07b960
lrw.c 10.9 KB