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
[email protected]
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

Reply via email to