I'm using the pthread.h
library in glibc-2.27
and when my process calls pthread_create()
eighteen times or more (it's supposed to be a heavy multi-threaded application) the process is aborted with the error message:
*** stack smashing detected ***: <unknown> terminated
Aborted (core dumped)
I did some strace
as part of my debugging ritual and I found the reason. Apparently all implicit calls for mmap()
as part of the pthread_create()
looks like this:
mmap(NULL, 8392704, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f6de43fa000
One can notice the MAP_STACK
flag which indicates:
Allocate the mapping at an address suitable for a process or thread stack. This flag is currently a no-op, but is used in the glibc threading implementation so that if some architectures require special treatment for stack allocations, support can later be transparently implemented for glibc.
(man mmap
on my system - Ubuntu 18.04 LTS)
It is possible to configure the pthread_create
call not to do this? or maybe use brk
or something else to increase the data segment automatically?
Thanks for any help!