mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-12 02:59:45 +00:00
Kernel: Add RTC as fallback entropy source if HPET is not found
This commit is contained in:
parent
0a61924727
commit
645657865d
Notes:
sideshowbarker
2024-07-18 22:50:07 +09:00
Author: https://github.com/sppmacd
Commit: 645657865d
Pull-request: https://github.com/SerenityOS/serenity/pull/5046
Issue: https://github.com/SerenityOS/serenity/issues/4490
Reviewed-by: https://github.com/tomuta ✅
2 changed files with 14 additions and 2 deletions
|
@ -30,6 +30,7 @@
|
|||
#include <Kernel/Devices/RandomDevice.h>
|
||||
#include <Kernel/Random.h>
|
||||
#include <Kernel/Time/HPET.h>
|
||||
#include <Kernel/Time/RTC.h>
|
||||
#include <Kernel/Time/TimeManagement.h>
|
||||
|
||||
namespace Kernel {
|
||||
|
@ -65,14 +66,23 @@ KernelRng::KernelRng()
|
|||
|
||||
this->resource().add_random_event(value, i % 32);
|
||||
}
|
||||
} else {
|
||||
} else if (TimeManagement::the().can_query_precise_time()) {
|
||||
// Add HPET as entropy source if we don't have anything better.
|
||||
klog() << "KernelRng: Using HPET as entropy source (bad!)";
|
||||
klog() << "KernelRng: Using HPET as entropy source";
|
||||
|
||||
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);
|
||||
}
|
||||
} else {
|
||||
// Fallback to RTC
|
||||
klog() << "KernelRng: Using RTC as entropy source (bad!)";
|
||||
time_t current_time = RTC::now();
|
||||
for (size_t i = 0; i < resource().pool_count * resource().reseed_threshold; ++i) {
|
||||
this->resource().add_random_event(current_time, i % 32);
|
||||
current_time *= 0x574a;
|
||||
current_time += 0x40b2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue