Kernel: Implement basic random device to /dev/random

This commit is contained in:
2024-08-22 14:02:26 +03:00
parent 969563c06a
commit 23194d1f53
5 changed files with 68 additions and 0 deletions

View File

@@ -0,0 +1,32 @@
#include <kernel/Device/DeviceNumbers.h>
#include <kernel/Device/RandomDevice.h>
#include <kernel/Random.h>
#include <sys/sysmacros.h>
namespace Kernel
{
BAN::ErrorOr<BAN::RefPtr<RandomDevice>> RandomDevice::create(mode_t mode, uid_t uid, gid_t gid)
{
static uint32_t minor = 0;
auto* result = new RandomDevice(mode, uid, gid, makedev(DeviceNumber::Random, minor++));
if (result == nullptr)
return BAN::Error::from_errno(ENOMEM);
return BAN::RefPtr<RandomDevice>::adopt(result);
}
BAN::ErrorOr<size_t> RandomDevice::read_impl(off_t, BAN::ByteSpan buffer)
{
size_t nwritten = 0;
while (nwritten < buffer.size())
{
const uint64_t random = Random::get_u64();
const size_t to_copy = BAN::Math::min(buffer.size() - nwritten, sizeof(random));
memcpy(buffer.data() + nwritten, &random, to_copy);
nwritten += to_copy;
}
return buffer.size();
}
}

View File

@@ -2,6 +2,7 @@
#include <kernel/Device/DebugDevice.h>
#include <kernel/Device/FramebufferDevice.h>
#include <kernel/Device/NullDevice.h>
#include <kernel/Device/RandomDevice.h>
#include <kernel/Device/ZeroDevice.h>
#include <kernel/FS/DevFS/FileSystem.h>
#include <kernel/FS/TmpFS/Inode.h>
@@ -26,6 +27,7 @@ namespace Kernel
MUST(s_instance->TmpFileSystem::initialize(0755, 0, 0));
s_instance->add_device(MUST(DebugDevice::create(0666, 0, 0)));
s_instance->add_device(MUST(NullDevice::create(0666, 0, 0)));
s_instance->add_device(MUST(RandomDevice::create(0666, 0, 0)));
s_instance->add_device(MUST(ZeroDevice::create(0666, 0, 0)));
s_instance->add_device(MUST(KeyboardDevice::create(0440, 0, 901)));
s_instance->add_device(MUST(MouseDevice::create(0440, 0, 901)));