From cda5230e3fbdbf38610a492639c946546434d174 Mon Sep 17 00:00:00 2001 From: Flower Black Date: Wed, 4 Dec 2024 12:20:01 +0800 Subject: [PATCH] Repair the out-of-bounds error of the semaphore. --- .../services/semaphore/semaphore_server.c | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/Ubiquitous/XiZi_AIoT/services/semaphore/semaphore_server.c b/Ubiquitous/XiZi_AIoT/services/semaphore/semaphore_server.c index a835ff8e9..ad4d9978b 100644 --- a/Ubiquitous/XiZi_AIoT/services/semaphore/semaphore_server.c +++ b/Ubiquitous/XiZi_AIoT/services/semaphore/semaphore_server.c @@ -41,15 +41,28 @@ int IPC_DO_SERVE_FUNC(Ipc_sem_create)(sem_t* sem, int* count) return SEMAPHORE_SUC; } + +#define CHECK_SEM_RANGE(sem) \ + do { \ + if (*sem < 0 || *sem >= MAX_SUPPORT_SEMAPHORES) { \ + return SEMAPHORE_ERR; \ + } \ + } while (0) + + +#define CHECK_SEM_RANGE_AND_VALID(sem) \ + do { \ + CHECK_SEM_RANGE(sem); \ + \ + if (!sem_pool[*sem].valid) { \ + return SEMAPHORE_ERR; \ + } \ + } while (0) + + int IPC_DO_SERVE_FUNC(Ipc_sem_delete)(sem_t* sem) { - if (*sem < 0 || *sem > MAX_SUPPORT_SEMAPHORES) { - return SEMAPHORE_ERR; - } - - if (!sem_pool[*sem].valid) { - return SEMAPHORE_ERR; - } + CHECK_SEM_RANGE_AND_VALID(sem); sem_pool[*sem].valid = false; return SEMAPHORE_SUC; @@ -57,9 +70,7 @@ int IPC_DO_SERVE_FUNC(Ipc_sem_delete)(sem_t* sem) int IPC_DO_SERVE_FUNC(Ipc_sem_wait)(sem_t* sem, int* timeout) { - if (*sem < 0 || *sem > MAX_SUPPORT_SEMAPHORES) { - return SEMAPHORE_ERR; - } + CHECK_SEM_RANGE(sem); /// @todo support timeout // return if sem is freed(no valid) or sem count is sufficient @@ -72,13 +83,7 @@ int IPC_DO_SERVE_FUNC(Ipc_sem_wait)(sem_t* sem, int* timeout) int IPC_DO_SERVE_FUNC(Ipc_sem_signal)(sem_t* sem) { - if (*sem < 0 || *sem >= MAX_SUPPORT_SEMAPHORES) { - return SEMAPHORE_ERR; - } - - if (!sem_pool[*sem].valid) { - return SEMAPHORE_ERR; - } + CHECK_SEM_RANGE_AND_VALID(sem); sem_pool[*sem].count++; return SEMAPHORE_SUC;