summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-07-23 08:25:39 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2025-07-23 08:25:39 +0100
commit3978ac0540a7e430a4a2a157d2e53653b5c37bd0 (patch)
tree1fb4dd49051c51676c00a65d8282752a975fa1b7 /dev/kernel
parentc968cdc88ce9458ba5b2859f9d983dc404c6c0ee (diff)
feat: rtl_sem_wait: check semaphore for underflows.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel')
-rw-r--r--dev/kernel/KernelKit/Semaphore.h13
1 files changed, 7 insertions, 6 deletions
diff --git a/dev/kernel/KernelKit/Semaphore.h b/dev/kernel/KernelKit/Semaphore.h
index 0d2b84da..686ce1c9 100644
--- a/dev/kernel/KernelKit/Semaphore.h
+++ b/dev/kernel/KernelKit/Semaphore.h
@@ -19,13 +19,9 @@
#define kSemaphoreCount (2)
-#define kSemaphoreIncrementOwner(sem) \
- (sem[kSemaphoreOwnerIndex]++)
-
-
-#define kSemaphoreDecrementOwner(sem) \
- (sem[kSemaphoreOwnerIndex]--)
+#define kSemaphoreIncrementOwner(sem) (sem[kSemaphoreOwnerIndex]++)
+#define kSemaphoreDecrementOwner(sem) (sem[kSemaphoreOwnerIndex]--)
namespace Kernel {
/// @brief Semaphore structure used for synchronization.
@@ -71,6 +67,11 @@ inline BOOL rtl_sem_wait(Semaphore& sem, UInt64 owner, UInt64 timeout, BOOL* con
return FALSE;
}
+ if (sem[kSemaphoreCountIndex] <= 0) {
+ err_global_get() = kErrorNetworkTimeout;
+ return FALSE;
+ }
+
if (timeout <= 0) {
err_global_get() = kErrorNetworkTimeout;