From f4caaca100d334b671eed56287dfe7a1009c47d7 Mon Sep 17 00:00:00 2001 From: Justin King Date: Fri, 16 Dec 2022 14:00:56 +0000 Subject: [PATCH] 8298852: Use of uninitialized memory in MetadataFactory::free_metadata Reviewed-by: coleenp, stefank, dholmes --- src/hotspot/share/memory/metadataFactory.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hotspot/share/memory/metadataFactory.hpp b/src/hotspot/share/memory/metadataFactory.hpp index 4f9f7490e11..84fdc6acf8a 100644 --- a/src/hotspot/share/memory/metadataFactory.hpp +++ b/src/hotspot/share/memory/metadataFactory.hpp @@ -70,6 +70,7 @@ class MetadataFactory : AllStatic { assert(!md->on_stack(), "can't deallocate things on stack"); assert(!md->is_shared(), "cannot deallocate if in shared spaces"); md->deallocate_contents(loader_data); + bool is_klass = md->is_klass(); // Call the destructor. This is currently used for MethodData which has a member // that needs to be destructed to release resources. Most Metadata derived classes have noop // destructors and/or cleanup using deallocate_contents. @@ -77,7 +78,7 @@ class MetadataFactory : AllStatic { // or volatile so we can call the destructor of the type T points to. using U = std::remove_cv_t; md->~U(); - loader_data->metaspace_non_null()->deallocate((MetaWord*)md, size, md->is_klass()); + loader_data->metaspace_non_null()->deallocate((MetaWord*)md, size, is_klass); } } };