This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new 54e85075c4 sched/event: init deleted node to avoid null pointer 
reference
54e85075c4 is described below

commit 54e85075c407fb546c58e2d7655d58f17f55f441
Author: chao an <[email protected]>
AuthorDate: Thu Dec 26 16:44:52 2024 +0800

    sched/event: init deleted node to avoid null pointer reference
    
    nxevent_tickwait() will remove the node in failure case(EINTR). If the node
    has been deleted in the nxevent_post(), NULL pointer reference will
    be triggered after semaphore wait.
    
    Signed-off-by: chao an <[email protected]>
---
 sched/event/event_post.c | 2 +-
 sched/event/event_wait.c | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/sched/event/event_post.c b/sched/event/event_post.c
index 412770fdd8..8963d9b37d 100644
--- a/sched/event/event_post.c
+++ b/sched/event/event_post.c
@@ -127,7 +127,7 @@ int nxevent_post(FAR nxevent_t *event, nxevent_mask_t 
events,
           if ((!waitall && ((wait->expect & event->events) != 0)) ||
               (waitall && ((wait->expect & event->events) == wait->expect)))
             {
-              list_delete(&wait->node);
+              list_delete_init(&wait->node);
 
               ret = nxevent_sem_post(&wait->sem);
               if (ret < 0)
diff --git a/sched/event/event_wait.c b/sched/event/event_wait.c
index 7ebea08de9..520ae093b0 100644
--- a/sched/event/event_wait.c
+++ b/sched/event/event_wait.c
@@ -127,16 +127,17 @@ nxevent_mask_t nxevent_tickwait(FAR nxevent_t *event, 
nxevent_mask_t events,
 
       if (delay == UINT32_MAX)
         {
-          ret = nxsem_wait(&wait.sem);
+          ret = nxsem_wait_uninterruptible(&wait.sem);
         }
       else
         {
-          ret = nxsem_tickwait(&wait.sem, delay);
+          ret = nxsem_tickwait_uninterruptible(&wait.sem, delay);
         }
 
       /* Destroy local variables */
 
       nxsem_destroy(&wait.sem);
+      list_delete(&wait.node);
 
       if (ret == 0)
         {
@@ -144,7 +145,6 @@ nxevent_mask_t nxevent_tickwait(FAR nxevent_t *event, 
nxevent_mask_t events,
         }
       else
         {
-          list_delete(&wait.node);
           events = 0;
         }
     }

Reply via email to