This a heap exploit. Threads share heap access with the main process.

I mean... you're missing the forest for the trees, but yes I meant "address space" generally not "stack" specifically. The nginx threads are forked, it would not be that terribly complex to set up a heap with a new random address base in each worker (the only real complexity is dealing with heap allocations which happened before fork()). But the stack matters too, generally moreso.

In your software, you set up a new heap for every pthread? I have never encountered this design pattern and would like to learn more.