• Ard Biesheuvel's avatar
    crypto: arm64/crct10dif - revert to C code for short inputs · d72b9d4a
    Ard Biesheuvel authored
    The SIMD routine ported from x86 used to have a special code path
    for inputs < 16 bytes, which got lost somewhere along the way.
    Instead, the current glue code aligns the input pointer to 16 bytes,
    which is not really necessary on this architecture (although it
    could be beneficial to performance to expose aligned data to the
    the NEON routine), but this could result in inputs of less than
    16 bytes to be passed in. This not only fails the new extended
    tests that Eric has implemented, it also results in the code
    reading past the end of the input, which could potentially result
    in crashes when dealing with less than 16 bytes of input at the
    end of a page which is followed by an unmapped page.
    
    So update the glue code to only invoke the NEON routine if the
    input is at least 16 bytes.
    Reported-by: default avatarEric Biggers <ebiggers@kernel.org>
    Reviewed-by: default avatarEric Biggers <ebiggers@kernel.org>
    Fixes: 6ef5737f ("crypto: arm64/crct10dif - port x86 SSE implementation to arm64")
    Cc: <stable@vger.kernel.org> # v4.10+
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    d72b9d4a
crct10dif-ce-glue.c 2.37 KB