From 0a61924727082ba5f4d53b19392ba3dd66880bf8 Mon Sep 17 00:00:00 2001 From: Maciej Zygmanowski Date: Fri, 22 Jan 2021 17:11:08 +0100 Subject: [PATCH] Kernel: Use HPET as entropy source if CPU doesn't support RDRAND We don't have anything better for these CPUs for now. --- Kernel/Random.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Kernel/Random.cpp b/Kernel/Random.cpp index 3230c03416..719bf1c45b 100644 --- a/Kernel/Random.cpp +++ b/Kernel/Random.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include namespace Kernel { @@ -45,6 +46,7 @@ KernelRng::KernelRng() bool supports_rdseed = Processor::current().has_feature(CPUFeature::RDSEED); bool supports_rdrand = Processor::current().has_feature(CPUFeature::RDRAND); if (supports_rdseed || supports_rdrand) { + klog() << "KernelRng: Using RDSEED or RDRAND as entropy source"; for (size_t i = 0; i < resource().pool_count * resource().reseed_threshold; ++i) { u32 value = 0; if (supports_rdseed) { @@ -63,6 +65,14 @@ KernelRng::KernelRng() this->resource().add_random_event(value, i % 32); } + } else { + // Add HPET as entropy source if we don't have anything better. + klog() << "KernelRng: Using HPET as entropy source (bad!)"; + + for (size_t i = 0; i < resource().pool_count * resource().reseed_threshold; ++i) { + u64 hpet_time = HPET::the().read_main_counter(); + this->resource().add_random_event(hpet_time, i % 32); + } } }