Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/amd64/stand/prekern Mmh, should check cpuid_level f...



details:   https://anonhg.NetBSD.org/src/rev/b87b07985fe4
branches:  trunk
changeset: 972247:b87b07985fe4
user:      maxv <maxv%NetBSD.org@localhost>
date:      Thu May 21 08:20:25 2020 +0000

description:
Mmh, should check cpuid_level first.

diffstat:

 sys/arch/amd64/stand/prekern/prng.c |  17 +++++++++++------
 1 files changed, 11 insertions(+), 6 deletions(-)

diffs (40 lines):

diff -r 0535228e0267 -r b87b07985fe4 sys/arch/amd64/stand/prekern/prng.c
--- a/sys/arch/amd64/stand/prekern/prng.c       Thu May 21 07:43:23 2020 +0000
+++ b/sys/arch/amd64/stand/prekern/prng.c       Thu May 21 08:20:25 2020 +0000
@@ -1,7 +1,7 @@
-/*     $NetBSD: prng.c,v 1.2 2017/11/26 11:08:34 maxv Exp $    */
+/*     $NetBSD: prng.c,v 1.3 2020/05/21 08:20:25 maxv Exp $    */
 
 /*
- * Copyright (c) 2017 The NetBSD Foundation, Inc. All rights reserved.
+ * Copyright (c) 2017-2020 The NetBSD Foundation, Inc. All rights reserved.
  *
  * This code is derived from software contributed to The NetBSD Foundation
  * by Maxime Villard.
@@ -148,6 +148,7 @@
 void
 prng_init(void)
 {
+       extern int cpuid_level;
        uint8_t digest[SHA512_DIGEST_LENGTH];
        SHA512_CTX ctx;
        u_int descs[4];
@@ -155,10 +156,14 @@
        memset(&rng, 0, sizeof(rng));
 
        /* detect cpu features */
-       cpuid(0x07, 0x00, descs);
-       has_rdseed = (descs[1] & CPUID_SEF_RDSEED) != 0;
-       cpuid(0x01, 0x00, descs);
-       has_rdrand = (descs[2] & CPUID2_RDRAND) != 0;
+       if (cpuid_level >= 0x07) {
+               cpuid(0x07, 0x00, descs);
+               has_rdseed = (descs[1] & CPUID_SEF_RDSEED) != 0;
+       }
+       if (cpuid_level >= 0x01) {
+               cpuid(0x01, 0x00, descs);
+               has_rdrand = (descs[2] & CPUID2_RDRAND) != 0;
+       }
 
        SHA512_Init(&ctx);
        prng_get_entropy_file(&ctx);



Home | Main Index | Thread Index | Old Index