[Bug ada/43993] New: Foreign thread results in Task_Alternate_Stack being used unitialized on linux

baldrick at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Wed May 5 16:09:00 GMT 2010


Noticed with valgrind.  Suppose a foreign thread calls Ada code.  This results
in Register_Foreign_Thread being called, which creates an ATCB.  At the end of
this routine, Enter_Task is called.  Enter_Task is defined in
s-taprop-linux.adb
on linux.  It contains this code that causes Task_Alternate_Stack to be
registered as the signal stack:

      if Use_Alternate_Stack then
         declare
            Stack  : aliased stack_t;
            Result : Interfaces.C.int;
         begin
            Stack.ss_sp    := Self_ID.Common.Task_Alternate_Stack;
            Stack.ss_size  := Alternate_Stack_Size;
            Stack.ss_flags := 0;
            Result := sigaltstack (Stack'Access, null);
            pragma Assert (Result = 0);
         end;
      end if;

But where was Task_Alternate_Stack initialized?  Answer: it wasn't.  Normally
it would be initialized in Task_Wrapper, but of course Task_Wrapper is not
called for foreign threads.

Using a random uninitialized address for the signal stack results in much
unpleasantness if the signal stack is ever used.


-- 
           Summary: Foreign thread results in Task_Alternate_Stack being
                    used unitialized on linux
           Product: gcc
           Version: 4.5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: ada
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: baldrick at gcc dot gnu dot org
 GCC build triplet: x86_64-unknown-linux-gnu
  GCC host triplet: x86_64-unknown-linux-gnu
GCC target triplet: x86_64-unknown-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43993



More information about the Gcc-bugs mailing list