mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-06 09:10:28 +00:00
![]() In Seventh Edition UNIX, the last pointer passed to free() was guaranteed to not actually have been freed allowing memory to be "compacted" via the following pattern: free(foo); foo = realloc(foo, newsize); Further, Andrew Koenig reports in "C Traps and Pitfalls" that the original realloc() implementation required this pattern. The C standard is clear that this is Undefined Behavior. Modern allocators don't support it and no portable code could rely on it so remove this support. Note: the removed implementation contains an off-by-one error and if an item isn't found on the freelist, then twice as much memory as the largest possible allocation will be copied. Reviewed by: kib, imp Obtained from: CheriBSD Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D21296 |
||
---|---|---|
.. | ||
aarch64 | ||
amd64 | ||
arm | ||
i386 | ||
mips | ||
powerpc | ||
powerpc64 | ||
riscv | ||
rtld-libc | ||
sparc64 | ||
tests | ||
debug.c | ||
debug.h | ||
libmap.c | ||
libmap.conf | ||
libmap.h | ||
Makefile | ||
Makefile.depend | ||
map_object.c | ||
paths.h | ||
rtld.1 | ||
rtld.c | ||
rtld.h | ||
rtld_lock.c | ||
rtld_lock.h | ||
rtld_malloc.c | ||
rtld_malloc.h | ||
rtld_printf.c | ||
rtld_printf.h | ||
rtld_tls.h | ||
rtld_utrace.h | ||
Symbol.map | ||
xmalloc.c |