• Adhemerval Zanella's avatar
    arm64: vDSO: Wire up getrandom() vDSO implementation · 712676ea
    Adhemerval Zanella authored
    Hook up the generic vDSO implementation to the aarch64 vDSO data page.
    The _vdso_rng_data required data is placed within the _vdso_data vvar
    page, by using a offset larger than the vdso_data.
    
    The vDSO function requires a ChaCha20 implementation that does not write
    to the stack, and that can do an entire ChaCha20 permutation.  The one
    provided uses NEON on the permute operation, with a fallback to the
    syscall for chips that do not support AdvSIMD.
    
    This also passes the vdso_test_chacha test along with
    vdso_test_getrandom. The vdso_test_getrandom bench-single result on
    Neoverse-N1 shows:
    
       vdso: 25000000 times in 0.783884250 seconds
       libc: 25000000 times in 8.780275399 seconds
    syscall: 25000000 times in 8.786581518 seconds
    
    A small fixup to arch/arm64/include/asm/mman.h was required to avoid
    pulling kernel code into the vDSO, similar to what's already done in
    arch/arm64/include/asm/rwonce.h.
    Signed-off-by: default avatarAdhemerval Zanella <adhemerval.zanella@linaro.org>
    Reviewed-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Acked-by: default avatarWill Deacon <will@kernel.org>
    Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    712676ea
vdso 31 Bytes