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

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


The following commit(s) were added to refs/heads/releases/12.7 by this push:
     new cc9d42804b local_sock: fix accept use-after-free
cc9d42804b is described below

commit cc9d42804beb1028f3e0051acfd55930069df469
Author: fangzhenwei <[email protected]>
AuthorDate: Fri Jun 7 11:51:15 2024 +0800

    local_sock: fix accept use-after-free
    
    we should get next waiter before acceptor released
    
    Signed-off-by: fangzhenwei <[email protected]>
---
 include/nuttx/queue.h     | 3 +++
 net/local/local_release.c | 5 ++---
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/include/nuttx/queue.h b/include/nuttx/queue.h
index 04bda577ee..89119d7723 100644
--- a/include/nuttx/queue.h
+++ b/include/nuttx/queue.h
@@ -170,6 +170,9 @@
   for((p) = (q)->head, (tmp) = (p) ? (p)->flink : NULL; \
       (p) != NULL; (p) = (tmp), (tmp) = (p) ? (p)->flink : NULL)
 
+#define dq_for_every(q, p) sq_for_every(q, p)
+#define dq_for_every_safe(q, p, tmp) sq_for_every_safe(q, p, tmp)
+
 #define sq_rem(p, q) \
   do \
     { \
diff --git a/net/local/local_release.c b/net/local/local_release.c
index f65bd81c24..0f32da000d 100644
--- a/net/local/local_release.c
+++ b/net/local/local_release.c
@@ -73,14 +73,13 @@ int local_release(FAR struct local_conn_s *conn)
     {
       FAR struct local_conn_s *accept;
       FAR dq_entry_t *waiter;
+      FAR dq_entry_t *tmp;
 
       DEBUGASSERT(conn->lc_proto == SOCK_STREAM);
 
       /* Are there still clients waiting for a connection to the server? */
 
-      for (waiter = dq_peek(&conn->u.server.lc_waiters);
-           waiter != NULL;
-           waiter = dq_next(&accept->u.accept.lc_waiter))
+      dq_for_every_safe(&conn->u.server.lc_waiters, waiter, tmp)
         {
           accept = container_of(waiter, struct local_conn_s,
                                 u.accept.lc_waiter);

Reply via email to