|
|
0b2558 |
# HG changeset patch
|
|
|
0b2558 |
# User ccheung
|
|
|
0b2558 |
# Date 1564075552 25200
|
|
|
0b2558 |
# Thu Jul 25 10:25:52 2019 -0700
|
|
|
0b2558 |
# Node ID 1edf6cc224fbf975eadf2a1810f67816a8607d30
|
|
|
0b2558 |
# Parent 73dbc713d4ddbdbeae71375db1603d85cef47f99
|
|
|
0b2558 |
8228407: JVM crashes with shared archive file mismatch
|
|
|
0b2558 |
Summary: Stop processing other header fields if initial header check has failed.
|
|
|
0b2558 |
Reviewed-by: dholmes, jiangli
|
|
|
0b2558 |
|
|
|
0b2558 |
diff --git a/src/hotspot/share/memory/filemap.cpp b/src/hotspot/share/memory/filemap.cpp
|
|
|
0b2558 |
--- a/src/hotspot/share/memory/filemap.cpp
|
|
|
0b2558 |
+++ b/src/hotspot/share/memory/filemap.cpp
|
|
|
0b2558 |
@@ -1287,7 +1287,9 @@
|
|
|
0b2558 |
}
|
|
|
0b2558 |
|
|
|
0b2558 |
init_from_file(_fd);
|
|
|
0b2558 |
- if (!validate_header()) {
|
|
|
0b2558 |
+ // UseSharedSpaces could be disabled if the checking of some of the header fields in
|
|
|
0b2558 |
+ // init_from_file has failed.
|
|
|
0b2558 |
+ if (!UseSharedSpaces || !validate_header()) {
|
|
|
0b2558 |
return false;
|
|
|
0b2558 |
}
|
|
|
0b2558 |
return true;
|
|
|
0b2558 |
diff --git a/test/hotspot/jtreg/runtime/appcds/SharedArchiveConsistency.java b/test/hotspot/jtreg/runtime/appcds/SharedArchiveConsistency.java
|
|
|
0b2558 |
--- a/test/hotspot/jtreg/runtime/appcds/SharedArchiveConsistency.java
|
|
|
0b2558 |
+++ b/test/hotspot/jtreg/runtime/appcds/SharedArchiveConsistency.java
|
|
|
0b2558 |
@@ -385,8 +385,16 @@
|
|
|
0b2558 |
output.shouldNotContain("Checksum verification failed");
|
|
|
0b2558 |
|
|
|
0b2558 |
copyFile(orgJsaFile, jsa);
|
|
|
0b2558 |
+ // modify _jvm_ident and run with -Xshare:auto
|
|
|
0b2558 |
+ System.out.println("\n2b. Corrupt _jvm_ident run with -Xshare:auto\n");
|
|
|
0b2558 |
+ modifyJvmIdent();
|
|
|
0b2558 |
+ output = TestCommon.execAuto(execArgs);
|
|
|
0b2558 |
+ output.shouldContain("The shared archive file was created by a different version or build of HotSpot");
|
|
|
0b2558 |
+ output.shouldContain("Hello World");
|
|
|
0b2558 |
+
|
|
|
0b2558 |
+ copyFile(orgJsaFile, jsa);
|
|
|
0b2558 |
// modify _magic and _paths_misc_info_size, test should fail
|
|
|
0b2558 |
- System.out.println("\n2b. Corrupt _magic and _paths_misc_info_size, should fail\n");
|
|
|
0b2558 |
+ System.out.println("\n2c. Corrupt _magic and _paths_misc_info_size, should fail\n");
|
|
|
0b2558 |
modifyHeaderIntField(offset_magic, 0x00000000);
|
|
|
0b2558 |
modifyHeaderIntField(offset_paths_misc_info_size, Integer.MAX_VALUE);
|
|
|
0b2558 |
output = TestCommon.execCommon(execArgs);
|
|
|
0b2558 |
@@ -395,7 +403,7 @@
|
|
|
0b2558 |
|
|
|
0b2558 |
copyFile(orgJsaFile, jsa);
|
|
|
0b2558 |
// modify _version and _paths_misc_info_size, test should fail
|
|
|
0b2558 |
- System.out.println("\n2c. Corrupt _version and _paths_misc_info_size, should fail\n");
|
|
|
0b2558 |
+ System.out.println("\n2d. Corrupt _version and _paths_misc_info_size, should fail\n");
|
|
|
0b2558 |
modifyHeaderIntField(offset_version, 0x00000000);
|
|
|
0b2558 |
modifyHeaderIntField(offset_paths_misc_info_size, Integer.MAX_VALUE);
|
|
|
0b2558 |
output = TestCommon.execCommon(execArgs);
|