RFR: 8278602: CDS dynamic dump may access unloaded classes
    Ioi Lam 
    iklam at openjdk.java.net
       
    Thu Dec 16 23:54:29 UTC 2021
    
    
  
On Thu, 16 Dec 2021 17:50:21 GMT, Coleen Phillimore <coleenp at openjdk.org> wrote:
> Could you also add your unloads a lot test even though it doesn't reproduce this particular error without the ZGC change? It might find a similar bug under stress conditions.
OK, I'll add the test case.
> src/hotspot/share/cds/dumpTimeClassInfo.inline.hpp line 53:
> 
>> 51:     assert_lock_strong(DumpTimeTable_lock);
>> 52:     if (k->is_loader_alive()) {
>> 53:       assert(k->is_loader_alive(), "must be");
> 
> This does seem a bit paranoid and redundant here.
Oops, that's was left over code. I'll remove it.
> src/hotspot/share/cds/dumpTimeClassInfo.inline.hpp line 58:
> 
>> 56:       return result;
>> 57:     } else {
>> 58:       if (!SystemDictionaryShared::is_excluded_class(k)) {
> 
> I thought this was the original bug?  is_excluded_class() looks at mirror->signers() which if the class isn't alive, mirror->signers() will crash.  This has to be in the k->is_loader_alive() too.
is_excluded_class() only checks the DumpTimeClassInfo::_is_excluded field. It doesn't examine the mirror->signers(). The crash happened with SystemDictionaryShared::check_excluded_classes(), which does examine the signers.
bool SystemDictionaryShared::is_excluded_class(InstanceKlass* k) {
  assert(_no_class_loading_should_happen, "sanity");
  assert_lock_strong(DumpTimeTable_lock);
  Arguments::assert_is_dumping_archive();
  DumpTimeClassInfo* p = find_or_allocate_info_for_locked(k);
  return (p == NULL) ? true : p->is_excluded();
}
-------------
PR: https://git.openjdk.java.net/jdk/pull/6859
    
    
More information about the hotspot-dev
mailing list