- 20 7月, 2013 1 次提交
-
-
由 Rich Felker 提交于
the sizes in the header and footer for a chunk should always match. if they don't, the program has definitely invoked undefined behavior, and the most likely cause is a simple overflow, either of a buffer in the block being freed or the one just below it. crashing here should not only improve security of buggy programs, but also aid in debugging, since the crash happens in a context where you have a pointer to the likely-overflowed buffer.
-
- 08 12月, 2012 1 次提交
-
-
由 Rich Felker 提交于
this change fixes an obscure issue with some nonstandard kernels, where the initial brk syscall returns a pointer just past the end of bss rather than the beginning of a new page. in that case, the dynamic linker has already reclaimed the space between the end of bss and the page end for use by malloc, and memory corruption (allocating the same memory twice) will occur when malloc again claims it on the first call to brk.
-
- 15 9月, 2012 1 次提交
-
-
由 Rich Felker 提交于
with this patch, the malloc in libc.so built with -Os is nearly the same speed as the one built with -O3. thus it solves the performance regression that resulted from removing the forced -O3 when building libc.so; now libc.so can be both small and fast.
-
- 17 11月, 2011 1 次提交
-
-
由 Rich Felker 提交于
CHUNK_SIZE macro was defined incorrectly and shaving off at least one significant bit in the size of mmapped chunks, resulting in the test for oldlen==newlen always failing and incurring a syscall. fortunately i don't think this issue caused any other observable behavior; the definition worked correctly for all non-mmapped chunks where its correctness matters more, since their lengths are always multiples of the alignment.
-
- 23 8月, 2011 1 次提交
-
-
由 Rich Felker 提交于
gcc generates extremely bad code (7 byte immediate mov) for the old null pointer write approach. it should be generating something like "xor %eax,%eax ; mov %al,(%eax)". in any case, using a dedicated crashing opcode accomplishes the same thing in one byte.
-
- 15 8月, 2011 1 次提交
-
-
由 Rich Felker 提交于
a valid mmapped block will have an even (actually aligned) "extra" field, whereas a freed chunk on the heap will always have an in-use neighbor. this fixes a potential bug if mmap ever allocated memory below the main program/brk (in which case it would be wrongly-detected as a double-free by the old code) and allows the double-free check to work for donated memory outside of the brk area (or, in the future, secondary heap zones if support for their creation is added).
-
- 27 6月, 2011 1 次提交
-
-
由 Rich Felker 提交于
-
- 12 6月, 2011 1 次提交
-
-
由 Rich Felker 提交于
even if size_t was 32-bit already, the fact that the value was unsigned and that gcc is too stupid to figure out it would be positive as a signed quantity (due to the immediately-prior arithmetic and conditionals) results in gcc compiling the integer-to-float conversion as zero extension to 64 bits followed by an "fildll" (64 bit) instruction rather than a simple "fildl" (32 bit) instruction on x86. reportedly fildll is very slow on certain p4-class machines; even if not, the new code is slightly smaller.
-
- 07 6月, 2011 1 次提交
-
-
由 Rich Felker 提交于
-
- 21 4月, 2011 1 次提交
-
-
由 Rich Felker 提交于
-
- 05 4月, 2011 1 次提交
-
-
由 Rich Felker 提交于
the bug appeared only with requests roughly 2*sizeof(size_t) to 4*sizeof(size_t) bytes smaller than a multiple of the page size, and only for requests large enough to be serviced by mmap instead of the normal heap. it was only ever observed on 64-bit machines but presumably could also affect 32-bit (albeit with a smaller window of opportunity).
-
- 02 4月, 2011 1 次提交
-
-
由 Rich Felker 提交于
if init_malloc returns positive (successful first init), malloc will retry getting a chunk from the free bins rather than expanding the heap again. also pass init_malloc a hint for the size of the initial allocation.
-
- 24 3月, 2011 1 次提交
-
-
由 Rich Felker 提交于
-
- 21 2月, 2011 1 次提交
-
-
由 Rich Felker 提交于
this change is made with some reluctance, but i think it's for the best. correct programs must handle either behavior, so there is little advantage to having malloc(0) return NULL. and i managed to actually make the malloc code slightly smaller with this change.
-
- 12 2月, 2011 1 次提交
-
-
由 Rich Felker 提交于
-