8263558: Possible NULL dereference in fast path arena free if ZapResourceArea is true

Reviewed-by: kbarrett, coleenp
This commit is contained in:
Thomas Stuefe 2021-03-20 09:06:53 +00:00
parent ab66d6991d
commit d2c137d408
2 changed files with 11 additions and 1 deletions

View File

@ -367,7 +367,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)

View File

@ -184,6 +184,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;