More thorough write-afetr-free checks.
authorotto <otto@openbsd.org>
Sun, 4 Jun 2023 06:58:33 +0000 (06:58 +0000)
committerotto <otto@openbsd.org>
Sun, 4 Jun 2023 06:58:33 +0000 (06:58 +0000)
commite78208e22ef5fe1ff45739e90c952a0a77911687
tree70c6e42b4adf6ff84aa4dcf8bd29039b939f74ad
parent5655a256dbe5dc1bd6b61d3678a678d3d6925e55
More thorough write-afetr-free checks.

On free, chunks (the pieces of a pages used for smaller allocations)
are junked and then validated after they leave the delayed free
list.  So after free, a chunk always contains junk bytes. This means
that if we start with the right contents for a new page of chunks,
we can *validate* instead of *write* junk bytes when (re)-using a
chunk.

With this, we can detect write-after-free when a chunk is recycled,
not justy when a chunk is in the delayed free list.  We do a little
bit more work on initial allocation of a page of chunks and when
re-using (as we validate now even on junk level 1).

Also: some extra consistency checks for recallocaray(3) and fixes
in error messages to make them more consistent, with man page bits.

Plus regress additions.
lib/libc/stdlib/malloc.3
lib/libc/stdlib/malloc.c
regress/lib/libc/malloc/malloc_errs/malloc_errs.c