https://gcc.gnu.org/g:26845c12efb7e00b33570db283e5f8b5268562c6

commit r16-1370-g26845c12efb7e00b33570db283e5f8b5268562c6
Author: Ronan Desplanques <desplanq...@adacore.com>
Date:   Tue Mar 18 13:56:58 2025 +0100

    ada: Fix use-after-free in Compute_All_Tasks
    
    This patch fixes a bug in System.Stack_Usage.Tasking.Compute_All_Tasks
    where it would attempt to read the stack of threads that had already
    completed.
    
    gcc/ada/ChangeLog:
    
            * libgnarl/s-stusta.adb (Compute_All_Tasks): Skip terminated tasks.

Diff:
---
 gcc/ada/libgnarl/s-stusta.adb | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/gcc/ada/libgnarl/s-stusta.adb b/gcc/ada/libgnarl/s-stusta.adb
index 5aca435e68c8..c9848a060c20 100644
--- a/gcc/ada/libgnarl/s-stusta.adb
+++ b/gcc/ada/libgnarl/s-stusta.adb
@@ -32,6 +32,7 @@
 --  This is why this package is part of GNARL:
 
 with System.Tasking.Debug;
+with System.Tasking.Stages;
 with System.Task_Primitives.Operations;
 
 with System.IO;
@@ -103,7 +104,9 @@ package body System.Stack_Usage.Tasking is
 
             --  Calculate the task usage for a given task
 
-            Report_For_Task (Id);
+            if not System.Tasking.Stages.Terminated (Id) then
+               Report_For_Task (Id);
+            end if;
          end loop;
 
       end if;

Reply via email to