malloc: Verify size of top chunk.

The House of Force is a well-known technique to exploit heap
overflow. In essence, this exploit takes three steps:
1. Overwrite the size of top chunk with very large value (e.g. -1).
2. Request x bytes from top chunk. As the size of top chunk
   is corrupted, x can be arbitrarily large and top chunk will
   still be offset by x.
3. The next allocation from top chunk will thus be controllable.

If we verify the size of top chunk at step 2, we can stop such attack.
This commit is contained in:
Pochang Chen 2018-08-16 15:24:24 -04:00 committed by DJ Delorie
parent 34f86d6168
commit 30a17d8c95
2 changed files with 7 additions and 0 deletions

View File

@ -1,3 +1,7 @@
2018-08-16 Pochang Chen <johnchen902@gmail.com>
* malloc/malloc.c (_int_malloc.c): Verify size of top chunk.
2018-08-16 Siddhesh Poyarekar <siddhesh@sourceware.org>
* benchtests/bench-strlen.c (do_test): Allocate buffers before

View File

@ -4076,6 +4076,9 @@ _int_malloc (mstate av, size_t bytes)
victim = av->top;
size = chunksize (victim);
if (__glibc_unlikely (size > av->system_mem))
malloc_printerr ("malloc(): corrupted top size");
if ((unsigned long) (size) >= (unsigned long) (nb + MINSIZE))
{
remainder_size = size - nb;