infinite recursion in malloc() with some compile flags
authorHans Mulder <hansmu@xs4all.nl>
Sun, 15 Jun 1997 11:26:35 +0000 (23:26 +1200)
committerTim Bunce <Tim.Bunce@ig.co.uk>
Wed, 6 Aug 1997 12:00:00 +0000 (00:00 +1200)
commit57569e04d232667a3e52996dff0f1e57f7d36b43
treef9fef4c94a68dafd8316e9f5e7665b2e8d8913b7
parentc9de509e331450a10058399280ce28f68f0faf39
infinite recursion in malloc() with some compile flags

Apologies if you see this twice, but I'm afraid my first attempt
fell into a black hole.  Neither Achim's archive nor the NNTP
gateway seem to have recieved it.

If one tries to compile perl with all of
-DPACK_MALLOC -DHIDEMYMALLOC -DUSE_PERL_SBRK -DPERL_SBRK_VIA_MALLOC
then it's almost certain that miniperl will overflow the C stack on
its first attempt to call malloc().

This happens because with -DPACK_MALLOC Perl_malloc() expects sbrk()
to return 2K-aligned blocks and Perl_sbrk() provides the same sort
of alignments as the system malloc(), i.e. 8 bytes or so.

When Perl_malloc() notices the block returned by sbrk() isn't properly
aligned, it tries to croak("panic: Off-page sbrk").  Croak() calls
mess(); mess() calls mess_alloc(); mess_alloc() calls Perl_malloc();
Perl_malloc() again calls croak() and so on until the C stack overflows.

I see two problems here;

1. With -DPACK_MALLOC, Perl_sbrk() should return 2K-aligned blocks.
2. croak() should not recurse infinitely.

The patch below deals with #1.  I'll think some more about #2.

p5p-msgid: 199706240050.CAA10550@xs2.xs4all.nl
malloc.c