mirror of
https://github.com/openjdk/jdk16u.git
synced 2025-12-11 03:01:15 -06:00
8263558: Possible NULL dereference in fast path arena free if ZapResourceArea is true
Backport-of: d2c137d408b9c44f8f8d71e62dfea24a4279300e
This commit is contained in:
parent
27c84494a5
commit
426cb6ad2a
@ -373,7 +373,14 @@ void* Arena::grow(size_t x, AllocFailType alloc_failmode) {
|
||||
|
||||
// Reallocate storage in Arena.
|
||||
void *Arena::Arealloc(void* old_ptr, size_t old_size, size_t new_size, AllocFailType alloc_failmode) {
|
||||
if (new_size == 0) return NULL;
|
||||
if (new_size == 0) {
|
||||
Afree(old_ptr, old_size); // like realloc(3)
|
||||
return NULL;
|
||||
}
|
||||
if (old_ptr == NULL) {
|
||||
assert(old_size == 0, "sanity");
|
||||
return Amalloc(new_size, alloc_failmode); // as with realloc(3), a NULL old ptr is equivalent to malloc(3)
|
||||
}
|
||||
#ifdef ASSERT
|
||||
if (UseMallocOnly) {
|
||||
// always allocate a new object (otherwise we'll free this one twice)
|
||||
|
||||
@ -186,6 +186,9 @@ protected:
|
||||
|
||||
// Fast delete in area. Common case is: NOP (except for storage reclaimed)
|
||||
bool Afree(void *ptr, size_t size) {
|
||||
if (ptr == NULL) {
|
||||
return true; // as with free(3), freeing NULL is a noop.
|
||||
}
|
||||
#ifdef ASSERT
|
||||
if (ZapResourceArea) memset(ptr, badResourceValue, size); // zap freed memory
|
||||
if (UseMallocOnly) return true;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user