8254937: Revert JDK-8148854 for 8u272

Fri, 16 Oct 2020 19:25:10 +0100

author
andrew
date
Fri, 16 Oct 2020 19:25:10 +0100
changeset 10012
73d58f4c918a
parent 10011
c49a13526ba9
child 10013
7ab1cd9c7843

8254937: Revert JDK-8148854 for 8u272
Reviewed-by: aph

src/share/vm/classfile/classFileParser.cpp file | annotate | diff | comparison | revisions
src/share/vm/classfile/verifier.cpp file | annotate | diff | comparison | revisions
src/share/vm/classfile/verifier.hpp file | annotate | diff | comparison | revisions
src/share/vm/runtime/reflection.cpp file | annotate | diff | comparison | revisions
test/runtime/ClassFile/BadHelloWorld.jcod file | annotate | diff | comparison | revisions
test/runtime/ClassFile/FormatCheckingTest.java file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/vm/classfile/classFileParser.cpp	Fri Oct 16 19:12:56 2020 +0100
     1.2 +++ b/src/share/vm/classfile/classFileParser.cpp	Fri Oct 16 19:25:10 2020 +0100
     1.3 @@ -3717,16 +3717,6 @@
     1.4    info->has_nonstatic_fields = has_nonstatic_fields;
     1.5  }
     1.6  
     1.7 -static bool relax_format_check_for(ClassLoaderData* loader_data) {
     1.8 -  bool trusted = (loader_data->is_the_null_class_loader_data() ||
     1.9 -                  SystemDictionary::is_ext_class_loader(loader_data->class_loader()));
    1.10 -  bool need_verify =
    1.11 -    // verifyAll
    1.12 -    (BytecodeVerificationLocal && BytecodeVerificationRemote) ||
    1.13 -    // verifyRemote
    1.14 -    (!BytecodeVerificationLocal && BytecodeVerificationRemote && !trusted);
    1.15 -  return !need_verify;
    1.16 -}
    1.17  
    1.18  instanceKlassHandle ClassFileParser::parseClassFile(Symbol* name,
    1.19                                                      ClassLoaderData* loader_data,
    1.20 @@ -3873,7 +3863,7 @@
    1.21  
    1.22    // Check if verification needs to be relaxed for this class file
    1.23    // Do not restrict it to jdk1.0 or jdk1.1 to maintain backward compatibility (4982376)
    1.24 -  _relax_verify = relax_format_check_for(_loader_data);
    1.25 +  _relax_verify = Verifier::relax_verify_for(class_loader());
    1.26  
    1.27    // Constant pool
    1.28    constantPoolHandle cp = parse_constant_pool(CHECK_(nullHandle));
     2.1 --- a/src/share/vm/classfile/verifier.cpp	Fri Oct 16 19:12:56 2020 +0100
     2.2 +++ b/src/share/vm/classfile/verifier.cpp	Fri Oct 16 19:25:10 2020 +0100
     2.3 @@ -98,7 +98,7 @@
     2.4      BytecodeVerificationLocal : BytecodeVerificationRemote;
     2.5  }
     2.6  
     2.7 -bool Verifier::relax_access_for(oop loader) {
     2.8 +bool Verifier::relax_verify_for(oop loader) {
     2.9    bool trusted = java_lang_ClassLoader::is_trusted_loader(loader);
    2.10    bool need_verify =
    2.11      // verifyAll
     3.1 --- a/src/share/vm/classfile/verifier.hpp	Fri Oct 16 19:12:56 2020 +0100
     3.2 +++ b/src/share/vm/classfile/verifier.hpp	Fri Oct 16 19:25:10 2020 +0100
     3.3 @@ -1,5 +1,5 @@
     3.4  /*
     3.5 - * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
     3.6 + * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
     3.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3.8   *
     3.9   * This code is free software; you can redistribute it and/or modify it
    3.10 @@ -57,8 +57,8 @@
    3.11    // -Xverify:all/none override this value
    3.12    static bool should_verify_for(oop class_loader, bool should_verify_class);
    3.13  
    3.14 -  // Relax certain access checks to enable some broken 1.1 apps to run on 1.2.
    3.15 -  static bool relax_access_for(oop class_loader);
    3.16 +  // Relax certain verifier checks to enable some broken 1.1 apps to run on 1.2.
    3.17 +  static bool relax_verify_for(oop class_loader);
    3.18  
    3.19   private:
    3.20    static bool is_eligible_for_verification(instanceKlassHandle klass, bool should_verify_class);
     4.1 --- a/src/share/vm/runtime/reflection.cpp	Fri Oct 16 19:12:56 2020 +0100
     4.2 +++ b/src/share/vm/runtime/reflection.cpp	Fri Oct 16 19:25:10 2020 +0100
     4.3 @@ -506,7 +506,7 @@
     4.4        (accessor_ik->major_version() < Verifier::STRICTER_ACCESS_CTRL_CHECK_VERSION &&
     4.5         accessee_ik->major_version() < Verifier::STRICTER_ACCESS_CTRL_CHECK_VERSION)) {
     4.6      return classloader_only &&
     4.7 -      Verifier::relax_access_for(accessor_ik->class_loader()) &&
     4.8 +      Verifier::relax_verify_for(accessor_ik->class_loader()) &&
     4.9        accessor_ik->protection_domain() == accessee_ik->protection_domain() &&
    4.10        accessor_ik->class_loader() == accessee_ik->class_loader();
    4.11    } else {
     5.1 --- a/test/runtime/ClassFile/BadHelloWorld.jcod	Fri Oct 16 19:12:56 2020 +0100
     5.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.3 @@ -1,138 +0,0 @@
     5.4 -/*
     5.5 - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
     5.6 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     5.7 - *
     5.8 - * This code is free software; you can redistribute it and/or modify it
     5.9 - * under the terms of the GNU General Public License version 2 only, as
    5.10 - * published by the Free Software Foundation.
    5.11 - *
    5.12 - * This code is distributed in the hope that it will be useful, but WITHOUT
    5.13 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    5.14 - * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    5.15 - * version 2 for more details (a copy is included in the LICENSE file that
    5.16 - * accompanied this code).
    5.17 - *
    5.18 - * You should have received a copy of the GNU General Public License version
    5.19 - * 2 along with this work; if not, write to the Free Software Foundation,
    5.20 - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    5.21 - *
    5.22 - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    5.23 - * or visit www.oracle.com if you need additional information or have any
    5.24 - * questions.
    5.25 - */
    5.26 -
    5.27 -/*
    5.28 - * This file fuzzes the class name #15 to have a leading 'L' and ending ';'.
    5.29 - */
    5.30 -
    5.31 -class BadHelloWorld {
    5.32 -  0xCAFEBABE;
    5.33 -  0; // minor version
    5.34 -  52; // version
    5.35 -  [31] { // Constant Pool
    5.36 -    ; // first element is empty
    5.37 -    Utf8 "BadHelloWorld"; // #1     at 0x0A
    5.38 -    class #1; // #2     at 0x1A
    5.39 -    Utf8 "java/lang/Object"; // #3     at 0x1D
    5.40 -    class #3; // #4     at 0x30
    5.41 -    Utf8 "<init>"; // #5     at 0x33
    5.42 -    Utf8 "()V"; // #6     at 0x3C
    5.43 -    NameAndType #5 #6; // #7     at 0x42
    5.44 -    Method #4 #7; // #8     at 0x47
    5.45 -    Utf8 "toString"; // #9     at 0x4C
    5.46 -    Utf8 "()Ljava/lang/String;"; // #10     at 0x57
    5.47 -    Utf8 "Hello, world!"; // #11     at 0x6E
    5.48 -    String #11; // #12     at 0x7E
    5.49 -    Utf8 "main"; // #13     at 0x81
    5.50 -    Utf8 "([Ljava/lang/String;)V"; // #14     at 0x88
    5.51 -    Utf8 "LBadHelloWorld;"; // #15     at 0xA1
    5.52 -    class #15; // #16     at 0xB3
    5.53 -    Method #16 #7; // #17     at 0xB6
    5.54 -    Utf8 "java/lang/System"; // #18     at 0xBB
    5.55 -    class #18; // #19     at 0xCE
    5.56 -    Utf8 "out"; // #20     at 0xD1
    5.57 -    Utf8 "Ljava/io/PrintStream;"; // #21     at 0xD7
    5.58 -    NameAndType #20 #21; // #22     at 0xEF
    5.59 -    Field #19 #22; // #23     at 0xF4
    5.60 -    Utf8 "java/io/PrintStream"; // #24     at 0xF9
    5.61 -    class #24; // #25     at 0x010F
    5.62 -    Utf8 "println"; // #26     at 0x0112
    5.63 -    Utf8 "(Ljava/lang/Object;)V"; // #27     at 0x011C
    5.64 -    NameAndType #26 #27; // #28     at 0x0134
    5.65 -    Method #25 #28; // #29     at 0x0139
    5.66 -    Utf8 "Code"; // #30     at 0x013E
    5.67 -  } // Constant Pool
    5.68 -
    5.69 -  0x0021; // access
    5.70 -  #2;// this_cpx
    5.71 -  #4;// super_cpx
    5.72 -
    5.73 -  [0] { // Interfaces
    5.74 -  } // Interfaces
    5.75 -
    5.76 -  [0] { // fields
    5.77 -  } // fields
    5.78 -
    5.79 -  [3] { // methods
    5.80 -    { // Member at 0x0151
    5.81 -      0x0001; // access
    5.82 -      #5; // name_cpx
    5.83 -      #6; // sig_cpx
    5.84 -      [1] { // Attributes
    5.85 -        Attr(#30, 17) { // Code at 0x0159
    5.86 -          1; // max_stack
    5.87 -          1; // max_locals
    5.88 -          Bytes[5]{
    5.89 -            0x2AB70008B1;
    5.90 -          };
    5.91 -          [0] { // Traps
    5.92 -          } // end Traps
    5.93 -          [0] { // Attributes
    5.94 -          } // Attributes
    5.95 -        } // end Code
    5.96 -      } // Attributes
    5.97 -    } // Member
    5.98 -    ;
    5.99 -    { // Member at 0x0170
   5.100 -      0x0001; // access
   5.101 -      #9; // name_cpx
   5.102 -      #10; // sig_cpx
   5.103 -      [1] { // Attributes
   5.104 -        Attr(#30, 15) { // Code at 0x0178
   5.105 -          1; // max_stack
   5.106 -          1; // max_locals
   5.107 -          Bytes[3]{
   5.108 -            0x120CB0;
   5.109 -          };
   5.110 -          [0] { // Traps
   5.111 -          } // end Traps
   5.112 -          [0] { // Attributes
   5.113 -          } // Attributes
   5.114 -        } // end Code
   5.115 -      } // Attributes
   5.116 -    } // Member
   5.117 -    ;
   5.118 -    { // Member at 0x018D
   5.119 -      0x0089; // access
   5.120 -      #13; // name_cpx
   5.121 -      #14; // sig_cpx
   5.122 -      [1] { // Attributes
   5.123 -        Attr(#30, 28) { // Code at 0x0195
   5.124 -          2; // max_stack
   5.125 -          2; // max_locals
   5.126 -          Bytes[16]{
   5.127 -            0xBB001059B700114C;
   5.128 -            0xB200172BB6001DB1;
   5.129 -          };
   5.130 -          [0] { // Traps
   5.131 -          } // end Traps
   5.132 -          [0] { // Attributes
   5.133 -          } // Attributes
   5.134 -        } // end Code
   5.135 -      } // Attributes
   5.136 -    } // Member
   5.137 -  } // methods
   5.138 -
   5.139 -  [0] { // Attributes
   5.140 -  } // Attributes
   5.141 -} // end class BadHelloWorld
     6.1 --- a/test/runtime/ClassFile/FormatCheckingTest.java	Fri Oct 16 19:12:56 2020 +0100
     6.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.3 @@ -1,43 +0,0 @@
     6.4 -/*
     6.5 - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
     6.6 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     6.7 - *
     6.8 - * This code is free software; you can redistribute it and/or modify it
     6.9 - * under the terms of the GNU General Public License version 2 only, as
    6.10 - * published by the Free Software Foundation.
    6.11 - *
    6.12 - * This code is distributed in the hope that it will be useful, but WITHOUT
    6.13 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    6.14 - * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    6.15 - * version 2 for more details (a copy is included in the LICENSE file that
    6.16 - * accompanied this code).
    6.17 - *
    6.18 - * You should have received a copy of the GNU General Public License version
    6.19 - * 2 along with this work; if not, write to the Free Software Foundation,
    6.20 - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    6.21 - *
    6.22 - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    6.23 - * or visit www.oracle.com if you need additional information or have any
    6.24 - * questions.
    6.25 - */
    6.26 -
    6.27 -/*
    6.28 - * @test
    6.29 - * @bug 8148854
    6.30 - * @summary Ensure class name loaded by app class loader is format checked by default
    6.31 - * @library /testlibrary
    6.32 - * @compile BadHelloWorld.jcod
    6.33 - * @run main FormatCheckingTest
    6.34 - */
    6.35 -
    6.36 -import com.oracle.java.testlibrary.OutputAnalyzer;
    6.37 -import com.oracle.java.testlibrary.ProcessTools;
    6.38 -
    6.39 -public class FormatCheckingTest {
    6.40 -    public static void main(String args[]) throws Throwable {
    6.41 -        ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("BadHelloWorld");
    6.42 -        OutputAnalyzer output = new OutputAnalyzer(pb.start());
    6.43 -        output.shouldContain("java.lang.ClassFormatError: Illegal class name");
    6.44 -        output.shouldHaveExitValue(1);
    6.45 -    }
    6.46 -}

mercurial