On Wed, Aug 13, 2008 at 02:53:44PM -0400, Matthew Von-Maszewski wrote:
> Package: libc6
> Version: 2.7-13
> Severity: important
> Tags: patch
>
>
> getaddrinfo_a creates a segfault in its worker thread due to the stack  
> size being too small.  Segfault happens here:
>
>   Program received signal SIGSEGV, Segmentation fault.
>   [Switching to Thread 0x40003950 (LWP 25753)]
>   __res_vinit (statp=0x40003dc8, preinit=0) at res_init.c:179
>   179                     statp->id = res_randomid();
>
> Upon entering __res_vinit, the stack pointer goes into the 0x1000 byte  
> guard region at the bottom of the thread's segment.
> The call into res_randomid causes the segment violation.  The code in  
> res_randomid is never reached.
>
> Here is a sample program to tickle the bug:
>
> #include <string.h>
> #include <netdb.h>
> #include <signal.h>
>
> int
> main(void)
> {
>       int ret_val;
>       struct sigevent sig;
>       struct gaicb gaistruct;
>
>       memset(&gaistruct, 0, sizeof(gaistruct));
>       struct gaicb *gptr[1];
>       gptr[0] = &gaistruct;
>       memset(&sig, 0, sizeof(sig));
>       gptr[0]->ar_name = "a";
>       sig.sigev_notify = SIGEV_NONE;
>       ret_val = getaddrinfo_a(GAI_WAIT, gptr, 1, &sig);
>
>       return 0;
> }
>
>
> Root cause of the bug is in debian/linuxthreads/sysdeps/pthread/ 
> gai_misc.h.  The code sets the stack size for

Are you kidding? linuxthreads is not used on amd64 for a long time. Given
this code is not even compiled on amd64, it can't be the root of the
problem.

-- 
  .''`.  Aurelien Jarno             | GPG: 1024D/F1BCDB73
 : :' :  Debian developer           | Electrical Engineer
 `. `'   [EMAIL PROTECTED]         | [EMAIL PROTECTED]
   `-    people.debian.org/~aurel32 | www.aurel32.net



-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to