RFR: 8278602: CDS dynamic dump may access unloaded classes [v2]

Ioi Lam iklam at openjdk.java.net
Fri Dec 17 00:28:11 UTC 2021


> Cause of crash:
> 
> When dumping a CDS archive,  while iterating over entries of the `SystemDictionaryShared::_dumptime_table`, we do not check whether the classes are already unloaded. In the crash, we are trying to call `InstanceKlass::signer()` but the class has already been unloaded.
> 
> Fix:
> 
> Override the  template function `DumpTimeSharedClassTable::iterate` to ensure iteration safety.  Do not iterate over a class if its `class_loader_data` is no longer alive.
> 
> The assert in `DumpTimeSharedClassTable::IterationHelper` found another existing bug -- we were calling `SystemDictionaryShared::is_dumptime_table_empty()` without holding the `DumpTimeTable_lock`. I delayed the call until we have grabbed the lock.
> 
> Testing:
> 
> I have attached a test case into the bug report. Without the fix, it would reproduce the same crash in less than a minute. With the fix, the crash is no longer reproducible.
> 
> Unfortunately, the test case requires a ZGC patch (thanks to @stefank) that adds delays to  increase the likelihood of seeing unloaded classes inside the `_dumptime_table`. Therefore, I cannot integrate the test as a jtreg test. I'll mark the bug as **noreg-hard**

Ioi Lam has updated the pull request incrementally with two additional commits since the last revision:

 - added test case
 - @coleenp and @stefank review comments

-------------

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/6859/files
  - new: https://git.openjdk.java.net/jdk/pull/6859/files/0075715d..686284fd

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=6859&range=01
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=6859&range=00-01

  Stats: 173 lines in 4 files changed: 171 ins; 1 del; 1 mod
  Patch: https://git.openjdk.java.net/jdk/pull/6859.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/6859/head:pull/6859

PR: https://git.openjdk.java.net/jdk/pull/6859


More information about the hotspot-dev mailing list