• Ard Biesheuvel's avatar
    crypto: arm/aes-ctr - fix NULL dereference in tail processing · 3b7df386
    Ard Biesheuvel authored
    [ Upstream commit f82e90b2 ]
    
    The AES-CTR glue code avoids calling into the blkcipher API for the
    tail portion of the walk, by comparing the remainder of walk.nbytes
    modulo AES_BLOCK_SIZE with the residual nbytes, and jumping straight
    into the tail processing block if they are equal. This tail processing
    block checks whether nbytes != 0, and does nothing otherwise.
    
    However, in case of an allocation failure in the blkcipher layer, we
    may enter this code with walk.nbytes == 0, while nbytes > 0. In this
    case, we should not dereference the source and destination pointers,
    since they may be NULL. So instead of checking for nbytes != 0, check
    for (walk.nbytes % AES_BLOCK_SIZE) != 0, which implies the former in
    non-error conditions.
    
    Fixes: 86464859 ("crypto: arm - AES in ECB/CBC/CTR/XTS modes using ARMv8 Crypto Extensions")
    Cc: stable@vger.kernel.org
    Reported-by: default avatarxiakaixu <xiakaixu@huawei.com>
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: default avatarSasha Levin <alexander.levin@verizon.com>
    3b7df386
aes-ce-glue.c 14.7 KB