Kernel: Seed RNG by real time if no RDRAND available
This commit is contained in:
parent
b979023b9d
commit
f3f5ca1bd8
|
@ -1,6 +1,7 @@
|
||||||
#include <kernel/Debug.h>
|
|
||||||
#include <kernel/CPUID.h>
|
#include <kernel/CPUID.h>
|
||||||
|
#include <kernel/Debug.h>
|
||||||
#include <kernel/Random.h>
|
#include <kernel/Random.h>
|
||||||
|
#include <kernel/Timer/Timer.h>
|
||||||
|
|
||||||
namespace Kernel
|
namespace Kernel
|
||||||
{
|
{
|
||||||
|
@ -18,9 +19,16 @@ namespace Kernel
|
||||||
CPUID::get_features(ecx, edx);
|
CPUID::get_features(ecx, edx);
|
||||||
|
|
||||||
if (ecx & CPUID::ECX_RDRND)
|
if (ecx & CPUID::ECX_RDRND)
|
||||||
|
{
|
||||||
asm volatile("rdrand %0" : "=a"(s_rand_seed));
|
asm volatile("rdrand %0" : "=a"(s_rand_seed));
|
||||||
|
dprintln("RNG seeded by RDRAND");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
dprintln("No RDRAND available");
|
{
|
||||||
|
auto rt = SystemTimer::get().real_time();
|
||||||
|
s_rand_seed ^= rt.tv_sec ^ rt.tv_nsec;
|
||||||
|
dprintln("RNG seeded by real time");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t Random::get_u32()
|
uint32_t Random::get_u32()
|
||||||
|
|
Loading…
Reference in New Issue