On Fri, Dec 11, 2020 at 04:00:04PM +0000, Andre Przywara wrote: > static inline bool __must_check arch_get_random_seed_long(unsigned long *v) > { > + struct arm_smccc_res res; > + > + /* > + * We prefer the SMCCC call, since its semantics (return actual > + * hardware backed entropy) is closer to the idea behind this > + * function here than what even the RNDRSS register provides > + * (the output of a pseudo RNG freshly seeded by a TRNG). > + */ This logic... > @@ -77,10 +117,20 @@ arch_get_random_seed_long_early(unsigned long *v) > { > WARN_ON(system_state != SYSTEM_BOOTING); > > - if (!__early_cpu_has_rndr()) > - return false; > + if (__early_cpu_has_rndr()) > + return __arm64_rndr(v); > + > + if (smccc_trng_available) { > + struct arm_smccc_res res; > > - return __arm64_rndr(v); > + arm_smccc_1_1_invoke(ARM_SMCCC_TRNG_RND64, 64, &res); > + if ((int)res.a0 >= 0) { > + *v = res.a3; > + return true; > + } > + } > + > + return false; ...seems to also apply here but we prefer the RNDR instead of the SMCC. We probably want to either do the same thing or add a comment saying what's going on.
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm