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/Debug.h> | ||||
| #include <kernel/Random.h> | ||||
| #include <kernel/Timer/Timer.h> | ||||
| 
 | ||||
| namespace Kernel | ||||
| { | ||||
|  | @ -18,9 +19,16 @@ namespace Kernel | |||
| 		CPUID::get_features(ecx, edx); | ||||
| 
 | ||||
| 		if (ecx & CPUID::ECX_RDRND) | ||||
| 		{ | ||||
| 			asm volatile("rdrand %0" : "=a"(s_rand_seed)); | ||||
| 			dprintln("RNG seeded by RDRAND"); | ||||
| 		} | ||||
| 		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() | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue