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: Adhemerval Zanella <adhemerval.zanella@linaro.org> Reviewed-by: Ard Biesheuvel <ardb@kernel.org> Acked-by: Will Deacon <will@kernel.org> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> |
||
|---|---|---|
| .. | ||
| sched | ||
| unaligned | ||
| align.h | ||
| arm-smccc.h | ||
| atomic.h | ||
| bitfield.h | ||
| bitmap.h | ||
| bitops.h | ||
| bits.h | ||
| btf_ids.h | ||
| bug.h | ||
| build_bug.h | ||
| cache.h | ||
| compiler-gcc.h | ||
| compiler.h | ||
| compiler_types.h | ||
| const.h | ||
| coresight-pmu.h | ||
| ctype.h | ||
| debugfs.h | ||
| delay.h | ||
| err.h | ||
| export.h | ||
| filter.h | ||
| find.h | ||
| ftrace.h | ||
| gfp.h | ||
| gfp_types.h | ||
| hash.h | ||
| hashtable.h | ||
| interrupt.h | ||
| interval_tree_generic.h | ||
| io.h | ||
| jhash.h | ||
| kallsyms.h | ||
| kconfig.h | ||
| kern_levels.h | ||
| kernel.h | ||
| linkage.h | ||
| list.h | ||
| list_sort.h | ||
| log2.h | ||
| math.h | ||
| math64.h | ||
| mm.h | ||
| module.h | ||
| mutex.h | ||
| nmi.h | ||
| numa.h | ||
| objtool_types.h | ||
| overflow.h | ||
| panic.h | ||
| pfn.h | ||
| poison.h | ||
| rbtree.h | ||
| rbtree_augmented.h | ||
| rcu.h | ||
| refcount.h | ||
| ring_buffer.h | ||
| rwsem.h | ||
| seq_file.h | ||
| sizes.h | ||
| slab.h | ||
| spinlock.h | ||
| static_call_types.h | ||
| string.h | ||
| stringify.h | ||
| time64.h | ||
| types.h | ||
| zalloc.h | ||