• Ard Biesheuvel's avatar
    crypto: arm64/aes-ctr - fix NULL dereference in tail processing · 2db34e78
    Ard Biesheuvel authored
    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: 49788fe2 ("arm64/crypto: AES-ECB/CBC/CTR/XTS using ARMv8 NEON and 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>
    2db34e78
aes-glue.c 13.8 KB