Fix a chunk recycling bug.
Fix a chunk recycling bug that could cause the allocator to lose track of whether a chunk was zeroed. On FreeBSD, NetBSD, and OS X, it could cause corruption if allocating via sbrk(2) (unlikely unless running with the "dss:primary" option specified). This was completely harmless on Linux unless using mlockall(2) (and unlikely even then, unless the --disable-munmap configure option or the "dss:primary" option was specified). This regression was introduced in 3.1.0 by the mlockall(2)/madvise(2) interaction fix.
This commit is contained in:
parent
d0e942e466
commit
a7a28c334e
@ -9,6 +9,14 @@ found in the git revision history:
|
|||||||
* 3.x.x (XXX Not yet released)
|
* 3.x.x (XXX Not yet released)
|
||||||
|
|
||||||
Bug fixes:
|
Bug fixes:
|
||||||
|
- Fix a chunk recycling bug that could cause the allocator to lose track of
|
||||||
|
whether a chunk was zeroed. On FreeBSD, NetBSD, and OS X, it could cause
|
||||||
|
corruption if allocating via sbrk(2) (unlikely unless running with the
|
||||||
|
"dss:primary" option specified). This was completely harmless on Linux
|
||||||
|
unless using mlockall(2) (and unlikely even then, unless the
|
||||||
|
--disable-munmap configure option or the "dss:primary" option was
|
||||||
|
specified). This regression was introduced in 3.1.0 by the
|
||||||
|
mlockall(2)/madvise(2) interaction fix.
|
||||||
- Fix TLS-related memory corruption that could occur during thread exit if the
|
- Fix TLS-related memory corruption that could occur during thread exit if the
|
||||||
thread never allocated memory. Only the quarantine and prof facilities were
|
thread never allocated memory. Only the quarantine and prof facilities were
|
||||||
susceptible.
|
susceptible.
|
||||||
|
@ -111,6 +111,7 @@ chunk_recycle(extent_tree_t *chunks_szad, extent_tree_t *chunks_ad, size_t size,
|
|||||||
}
|
}
|
||||||
node->addr = (void *)((uintptr_t)(ret) + size);
|
node->addr = (void *)((uintptr_t)(ret) + size);
|
||||||
node->size = trailsize;
|
node->size = trailsize;
|
||||||
|
node->zeroed = zeroed;
|
||||||
extent_tree_szad_insert(chunks_szad, node);
|
extent_tree_szad_insert(chunks_szad, node);
|
||||||
extent_tree_ad_insert(chunks_ad, node);
|
extent_tree_ad_insert(chunks_ad, node);
|
||||||
node = NULL;
|
node = NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user