glibc/malloc
Eyal Itkin a1a486d70e Add Safe-Linking to fastbins and tcache
Safe-Linking is a security mechanism that protects single-linked
lists (such as the fastbin and tcache) from being tampered by attackers.
The mechanism makes use of randomness from ASLR (mmap_base), and when
combined with chunk alignment integrity checks, it protects the "next"
pointers from being hijacked by an attacker.

While Safe-Unlinking protects double-linked lists (such as the small
bins), there wasn't any similar protection for attacks against
single-linked lists. This solution protects against 3 common attacks:
  * Partial pointer override: modifies the lower bytes (Little Endian)
  * Full pointer override: hijacks the pointer to an attacker's location
  * Unaligned chunks: pointing the list to an unaligned address

The design assumes an attacker doesn't know where the heap is located,
and uses the ASLR randomness to "sign" the single-linked pointers. We
mark the pointer as P and the location in which it is stored as L, and
the calculation will be:
  * PROTECT(P) := (L >> PAGE_SHIFT) XOR (P)
  * *L = PROTECT(P)

This way, the random bits from the address L (which start at the bit
in the PAGE_SHIFT position), will be merged with LSB of the stored
protected pointer. This protection layer prevents an attacker from
modifying the pointer into a controlled value.

An additional check that the chunks are MALLOC_ALIGNed adds an
important layer:
  * Attackers can't point to illegal (unaligned) memory addresses
  * Attackers must guess correctly the alignment bits

On standard 32 bit Linux machines, an attack will directly fail 7
out of 8 times, and on 64 bit machines it will fail 15 out of 16
times.

This proposed patch was benchmarked and it's effect on the overall
performance of the heap was negligible and couldn't be distinguished
from the default variance between tests on the vanilla version. A
similar protection was added to Chromium's version of TCMalloc
in 2012, and according to their documentation it had an overhead of
less than 2%.

Reviewed-by: DJ Delorie <dj@redhat.com>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Reviewed-by: Adhemerval Zacnella <adhemerval.zanella@linaro.org>
2020-03-29 13:03:14 -04:00
..
alloc_buffer_alloc_array.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
alloc_buffer_allocate.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
alloc_buffer_copy_bytes.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
alloc_buffer_copy_string.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
alloc_buffer_create_failure.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
arena.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
Depend malloc: Add nptl, htl dependency for the subdirectory [BZ #24757] 2019-07-02 16:51:13 +02:00
dynarray_at_failure.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
dynarray_emplace_enlarge.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
dynarray_finalize.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
dynarray_resize_clear.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
dynarray_resize.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
dynarray-skeleton.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
dynarray.h Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
hooks.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
Makefile Remove incorrect alloc_size attribute from pvalloc [BZ #25401] 2020-01-17 15:05:34 +01:00
malloc-hooks.h Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
malloc-internal.h Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
malloc.c Add Safe-Linking to fastbins and tcache 2020-03-29 13:03:14 -04:00
malloc.h Remove incorrect alloc_size attribute from pvalloc [BZ #25401] 2020-01-17 15:05:34 +01:00
mallocbug.c
mcheck-init.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
mcheck.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
mcheck.h Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
memusage.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
memusage.sh Update copyright dates not handled by scripts/update-copyrights. 2020-01-01 00:21:22 +00:00
memusagestat.c Update copyright dates not handled by scripts/update-copyrights. 2020-01-01 00:21:22 +00:00
morecore.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
mtrace.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
mtrace.pl Update copyright dates not handled by scripts/update-copyrights. 2020-01-01 00:21:22 +00:00
obstack.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
obstack.h Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
reallocarray.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
scratch_buffer_grow_preserve.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
scratch_buffer_grow.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
scratch_buffer_set_array_size.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
set-freeres.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
thread-freeres.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-alloc_buffer.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-calloc.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-dynarray-at-fail.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-dynarray-fail.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-dynarray-shared.h Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-dynarray.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-interpose-aux-nothread.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-interpose-aux-thread.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-interpose-aux.c elf: Move vDSO setup to rtld (BZ#24967) 2020-01-03 11:22:07 -03:00
tst-interpose-aux.h Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-interpose-nothread.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-interpose-skeleton.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-interpose-static-nothread.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-interpose-static-thread.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-interpose-thread.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-malloc_info.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-malloc-backtrace.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-malloc-fork-deadlock.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-malloc-stats-cancellation.c
tst-malloc-tcache-leak.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-malloc-thread-exit.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-malloc-thread-fail.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-malloc-too-large.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-malloc-usable-static-tunables.c
tst-malloc-usable-static.c
tst-malloc-usable-tunables.c
tst-malloc-usable.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-malloc.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-mallocfork2.c malloc/tst-mallocfork2: Kill lingering process for unexpected failures 2020-02-27 13:43:57 -03:00
tst-mallocfork.c Fix malloc tests build with GCC 10. 2019-06-10 22:12:08 +00:00
tst-mallocstate.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-mallopt.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-mcheck.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-memalign.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-mtrace.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-mtrace.sh Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-mxfast.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-obstack.c
tst-posix_memalign.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-pvalloc-fortify.c Remove incorrect alloc_size attribute from pvalloc [BZ #25401] 2020-01-17 15:05:34 +01:00
tst-pvalloc.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-realloc.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-reallocarray.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-scratch_buffer.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-tcfree1.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-tcfree2.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-tcfree3.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
tst-trim1.c
tst-valloc.c Update copyright dates with scripts/update-copyrights. 2020-01-01 00:14:33 +00:00
Versions