Updated kernel (tl;dr: improved filesystem, tasking, loading files, etc..)

This commit is contained in:
Alex
2023-02-06 19:35:44 +02:00
parent 640f6a412a
commit a592b85ce5
46 changed files with 3503 additions and 2412 deletions

View File

@ -6,64 +6,131 @@
namespace Tasking
{
struct TokenData
{
Token token;
enum TokenTrustLevel TrustLevel;
uint64_t OwnerID;
bool Process;
};
Vector<TokenData> Tokens;
Token Security::CreateToken()
{
uint64_t ret = Random::rand64();
uint64_t ret = 0;
Retry:
ret = Random::rand64();
foreach (auto t in Tokens)
if (t.token == ret)
goto Retry;
Tokens.push_back({ret, UnknownTrustLevel, 0, false});
debug("Created token %#lx", ret);
return ret;
}
bool Security::TrustToken(Token token,
TokenTrustLevel TrustLevel)
bool Security::TrustToken(Token token, TTL TrustLevel)
{
enum TokenTrustLevel Level = static_cast<enum TokenTrustLevel>(TrustLevel);
foreach (auto var in Tokens)
foreach (auto &t in Tokens)
{
if (var.token == token)
if (t.token == token)
{
var.TrustLevel = Level;
debug("Trusted token %#lx", token);
t.TrustLevel = TrustLevel;
debug("Trusted token %#lx to level %d", token, t.TrustLevel);
return true;
}
}
debug("Failed to trust token %#lx", token);
warn("Failed to trust token %#lx", token);
return false;
}
bool Security::UntrustToken(Token token)
{
fixme("UntrustToken->false");
UNUSED(token);
foreach (auto &t in Tokens)
{
if (t.token == token)
{
t.TrustLevel = Untrusted;
debug("Untrusted token %#lx", token);
return true;
}
}
warn("Failed to untrust token %#lx", token);
return false;
}
bool Security::AddTrustLevel(Token token, TTL TrustLevel)
{
foreach (auto &t in Tokens)
{
if (t.token == token)
{
t.TrustLevel |= TrustLevel;
debug("Added trust level %d to token %#lx", t.TrustLevel, token);
return true;
}
}
warn("Failed to add trust level %d to token %#lx", TrustLevel, token);
return false;
}
bool Security::RemoveTrustLevel(Token token, TTL TrustLevel)
{
foreach (auto &t in Tokens)
{
if (t.token == token)
{
t.TrustLevel &= ~TrustLevel;
debug("Removed trust level %d from token %#lx", t.TrustLevel, token);
return true;
}
}
warn("Failed to remove trust level %d from token %#lx", TrustLevel, token);
return false;
}
bool Security::DestroyToken(Token token)
{
fixme("DestroyToken->false");
fixme("DestroyToken->true");
UNUSED(token);
return true;
}
bool Security::IsTokenTrusted(Token token, TTL TrustLevel)
{
foreach (auto t in Tokens)
if (t.token == token)
{
if (t.TrustLevel == TrustLevel)
return true;
else
return false;
}
warn("Failed to check trust level of token %#lx", token);
return false;
}
Security::Security()
bool Security::IsTokenTrusted(Token token, int TrustLevel)
{
trace("Initializing Tasking Security");
foreach (auto t in Tokens)
if (t.token == token)
{
if (t.TrustLevel & TrustLevel)
return true;
else
return false;
}
warn("Failed to check trust level of token %#lx", token);
return false;
}
int Security::GetTokenTrustLevel(Token token)
{
foreach (auto t in Tokens)
if (t.token == token)
return t.TrustLevel;
warn("Failed to get trust level of token %#lx", token);
return UnknownTrustLevel;
}
Security::Security() {}
Security::~Security()
{
trace("Destroying Tasking Security");
for (size_t i = 0; i < Tokens.size(); i++)
Tokens.remove(i);
}