From 6840a8983cf1b235f8c3e7fe27cd5e9736eceaa9 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Wed, 29 May 2024 20:01:12 +0300 Subject: [PATCH] Kernel: Make sure MSB is not set on SMO keys --- kernel/include/kernel/Memory/SharedMemoryObject.h | 2 +- kernel/kernel/Memory/SharedMemoryObject.cpp | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/kernel/include/kernel/Memory/SharedMemoryObject.h b/kernel/include/kernel/Memory/SharedMemoryObject.h index 79dcb650..e494d949 100644 --- a/kernel/include/kernel/Memory/SharedMemoryObject.h +++ b/kernel/include/kernel/Memory/SharedMemoryObject.h @@ -14,7 +14,7 @@ namespace Kernel class SharedMemoryObjectManager { public: - using Key = uint32_t; + using Key = size_t; public: static BAN::ErrorOr initialize(); diff --git a/kernel/kernel/Memory/SharedMemoryObject.cpp b/kernel/kernel/Memory/SharedMemoryObject.cpp index bd41b60c..c36893c7 100644 --- a/kernel/kernel/Memory/SharedMemoryObject.cpp +++ b/kernel/kernel/Memory/SharedMemoryObject.cpp @@ -32,9 +32,12 @@ namespace Kernel LockGuard _(m_mutex); - Key key = Random::get(); + // NOTE: don't set the top bit so cast to signed is not negative + auto generate_key = []() { return Random::get() & (~(Key)0 >> 1); }; + + Key key = generate_key(); while (m_objects.contains(key)) - key = Random::get(); + key = generate_key(); TRY(m_objects.insert(key, object)); return key;