RFR: 8328085: C2: Use after free in PhaseChaitin::Register_Allocate()
Richard Reingruber
rrich at openjdk.org
Tue Nov 19 08:16:55 UTC 2024
This change removes the ResourceMark from `PhaseChaitin::merge_multidefs()` because it frees memory that is used in the caller method `PhaseChaitin::Register_Allocate`.
[My comment](https://bugs.openjdk.org/browse/JDK-8328085?focusedId=14723086&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14723086) on the JBS item explains the details.
#### Testing
I was able to reproduce the issue on ppc64le but not on x86_64 running applications/ctw/modules/java_desktop.java. The issue didn't reproduce with this pr.
#### ResourceArea Sizes
I've traced maximum ResourceArea size after returning from `PhaseChaitin::merge_multidefs()` (see [first commit](https://github.com/openjdk/jdk/pull/22200/commits/ffbe6dee05a5a66c2965f4ff7e4cd466605cf89d)).
I haven't found a significant difference.
Below you can see the last trace line from each run.
##### x86_64: 3 Runs Dacapo Tomcat 5 Iterations
###### Baseline
Run 1: [24.222s][info][newcode] New maximum for resource area size: 3274 KB
Run 2: [21.317s][info][newcode] New maximum for resource area size: 3274 KB
Run 3: [37.400s][info][newcode] New maximum for resource area size: 3336 KB
###### PR
Run 1: [35.002s][info][newcode] New maximum for resource area size: 3363 KB
Run 2: [21.332s][info][newcode] New maximum for resource area size: 3274 KB
Run 3: [36.050s][info][newcode] New maximum for resource area size: 3286 KB
##### x86_64: 3 Runs applications/ctw/modules/java_desktop.java
###### Baseline
Run 1: [29.876s][info][newcode] New maximum for resource area size: 3143 KB
Run 2: [29.631s][info][newcode] New maximum for resource area size: 3111 KB
Run 3: [29.227s][info][newcode] New maximum for resource area size: 3142 KB
###### PR
Run 1: [29.755s][info][newcode] New maximum for resource area size: 3175 KB
Run 2: [28.964s][info][newcode] New maximum for resource area size: 3143 KB
Run 3: [28.863s][info][newcode] New maximum for resource area size: 3143 KB
##### PPC: 3 Runs Dacapo Tomcat 5 Iterations
###### Baseline
Run 1: [20.041s][info][newcode] New maximum for resource area size: 3474 KB
Run 2: [20.581s][info][newcode] New maximum for resource area size: 3474 KB
Run 3: [20.367s][info][newcode] New maximum for resource area size: 3474 KB
###### PR
Run 1: [20.520s][info][newcode] New maximum for resource area size: 3506 KB
Run 2: [20.918s][info][newcode] New maximum for resource area size: 3506 KB
Run 3: [20.994s][info][newcode] New maximum for resource area size: 3505 KB
##### PPC: 3 Runs applications/ctw/modules/java_desktop.java
###### Baseline
Run 1: [71.992s][info][newcode] New maximum for resource area size: 3483 KB
Run 2: [55.808s][info][newcode] New maximum for resource area size: 3483 KB
Run 3: [29.252s][info][newcode] New maximum for resource area size: 1684 KB
###### PR
Run 1: [55.996s][info][newcode] New maximum for resource area size: 3515 KB
Run 2: [30.384s][info][newcode] New maximum for resource area size: 2849 KB
Run 3: [65.671s][info][newcode] New maximum for resource area size: 3547 KB
-------------
Commit messages:
- Revert trace code
- Remove ResourceMark from PhaseChaitin::merge_multidefs
- Log max Resourcearea size after merge_multidefs
Changes: https://git.openjdk.org/jdk/pull/22200/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=22200&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8328085
Stats: 1 line in 1 file changed: 0 ins; 1 del; 0 mod
Patch: https://git.openjdk.org/jdk/pull/22200.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/22200/head:pull/22200
PR: https://git.openjdk.org/jdk/pull/22200
More information about the hotspot-compiler-dev
mailing list