2772 // Support for java_security_AccessControlContext |
2772 // Support for java_security_AccessControlContext |
2773 |
2773 |
2774 int java_security_AccessControlContext::_context_offset = 0; |
2774 int java_security_AccessControlContext::_context_offset = 0; |
2775 int java_security_AccessControlContext::_privilegedContext_offset = 0; |
2775 int java_security_AccessControlContext::_privilegedContext_offset = 0; |
2776 int java_security_AccessControlContext::_isPrivileged_offset = 0; |
2776 int java_security_AccessControlContext::_isPrivileged_offset = 0; |
|
2777 int java_security_AccessControlContext::_isAuthorized_offset = -1; |
2777 |
2778 |
2778 void java_security_AccessControlContext::compute_offsets() { |
2779 void java_security_AccessControlContext::compute_offsets() { |
2779 assert(_isPrivileged_offset == 0, "offsets should be initialized only once"); |
2780 assert(_isPrivileged_offset == 0, "offsets should be initialized only once"); |
2780 fieldDescriptor fd; |
2781 fieldDescriptor fd; |
2781 InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::AccessControlContext_klass()); |
2782 InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::AccessControlContext_klass()); |
2792 |
2793 |
2793 if (!ik->find_local_field(vmSymbols::isPrivileged_name(), vmSymbols::bool_signature(), &fd)) { |
2794 if (!ik->find_local_field(vmSymbols::isPrivileged_name(), vmSymbols::bool_signature(), &fd)) { |
2794 fatal("Invalid layout of java.security.AccessControlContext"); |
2795 fatal("Invalid layout of java.security.AccessControlContext"); |
2795 } |
2796 } |
2796 _isPrivileged_offset = fd.offset(); |
2797 _isPrivileged_offset = fd.offset(); |
2797 } |
2798 |
2798 |
2799 // The offset may not be present for bootstrapping with older JDK. |
|
2800 if (ik->find_local_field(vmSymbols::isAuthorized_name(), vmSymbols::bool_signature(), &fd)) { |
|
2801 _isAuthorized_offset = fd.offset(); |
|
2802 } |
|
2803 } |
|
2804 |
|
2805 |
|
2806 bool java_security_AccessControlContext::is_authorized(Handle context) { |
|
2807 assert(context.not_null() && context->klass() == SystemDictionary::AccessControlContext_klass(), "Invalid type"); |
|
2808 assert(_isAuthorized_offset != -1, "should be set"); |
|
2809 return context->bool_field(_isAuthorized_offset) != 0; |
|
2810 } |
2799 |
2811 |
2800 oop java_security_AccessControlContext::create(objArrayHandle context, bool isPrivileged, Handle privileged_context, TRAPS) { |
2812 oop java_security_AccessControlContext::create(objArrayHandle context, bool isPrivileged, Handle privileged_context, TRAPS) { |
2801 assert(_isPrivileged_offset != 0, "offsets should have been initialized"); |
2813 assert(_isPrivileged_offset != 0, "offsets should have been initialized"); |
2802 // Ensure klass is initialized |
2814 // Ensure klass is initialized |
2803 InstanceKlass::cast(SystemDictionary::AccessControlContext_klass())->initialize(CHECK_0); |
2815 InstanceKlass::cast(SystemDictionary::AccessControlContext_klass())->initialize(CHECK_0); |
2805 oop result = InstanceKlass::cast(SystemDictionary::AccessControlContext_klass())->allocate_instance(CHECK_0); |
2817 oop result = InstanceKlass::cast(SystemDictionary::AccessControlContext_klass())->allocate_instance(CHECK_0); |
2806 // Fill in values |
2818 // Fill in values |
2807 result->obj_field_put(_context_offset, context()); |
2819 result->obj_field_put(_context_offset, context()); |
2808 result->obj_field_put(_privilegedContext_offset, privileged_context()); |
2820 result->obj_field_put(_privilegedContext_offset, privileged_context()); |
2809 result->bool_field_put(_isPrivileged_offset, isPrivileged); |
2821 result->bool_field_put(_isPrivileged_offset, isPrivileged); |
|
2822 // whitelist AccessControlContexts created by the JVM. |
|
2823 result->bool_field_put(_isAuthorized_offset, true); |
2810 return result; |
2824 return result; |
2811 } |
2825 } |
2812 |
2826 |
2813 |
2827 |
2814 // Support for java_lang_ClassLoader |
2828 // Support for java_lang_ClassLoader |
2914 int java_lang_System::err_offset_in_bytes() { |
2928 int java_lang_System::err_offset_in_bytes() { |
2915 return (InstanceMirrorKlass::offset_of_static_fields() + static_err_offset); |
2929 return (InstanceMirrorKlass::offset_of_static_fields() + static_err_offset); |
2916 } |
2930 } |
2917 |
2931 |
2918 |
2932 |
|
2933 bool java_lang_System::has_security_manager() { |
|
2934 InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::System_klass()); |
|
2935 address addr = ik->static_field_addr(static_security_offset); |
|
2936 if (UseCompressedOops) { |
|
2937 return oopDesc::load_decode_heap_oop((narrowOop *)addr) != NULL; |
|
2938 } else { |
|
2939 return oopDesc::load_decode_heap_oop((oop*)addr) != NULL; |
|
2940 } |
|
2941 } |
2919 |
2942 |
2920 int java_lang_Class::_klass_offset; |
2943 int java_lang_Class::_klass_offset; |
2921 int java_lang_Class::_array_klass_offset; |
2944 int java_lang_Class::_array_klass_offset; |
2922 int java_lang_Class::_oop_size_offset; |
2945 int java_lang_Class::_oop_size_offset; |
2923 int java_lang_Class::_static_oop_field_count_offset; |
2946 int java_lang_Class::_static_oop_field_count_offset; |
2974 int java_lang_ref_SoftReference::static_clock_offset; |
2997 int java_lang_ref_SoftReference::static_clock_offset; |
2975 int java_lang_ClassLoader::parent_offset; |
2998 int java_lang_ClassLoader::parent_offset; |
2976 int java_lang_System::static_in_offset; |
2999 int java_lang_System::static_in_offset; |
2977 int java_lang_System::static_out_offset; |
3000 int java_lang_System::static_out_offset; |
2978 int java_lang_System::static_err_offset; |
3001 int java_lang_System::static_err_offset; |
|
3002 int java_lang_System::static_security_offset; |
2979 int java_lang_StackTraceElement::declaringClass_offset; |
3003 int java_lang_StackTraceElement::declaringClass_offset; |
2980 int java_lang_StackTraceElement::methodName_offset; |
3004 int java_lang_StackTraceElement::methodName_offset; |
2981 int java_lang_StackTraceElement::fileName_offset; |
3005 int java_lang_StackTraceElement::fileName_offset; |
2982 int java_lang_StackTraceElement::lineNumber_offset; |
3006 int java_lang_StackTraceElement::lineNumber_offset; |
2983 int java_lang_AssertionStatusDirectives::classes_offset; |
3007 int java_lang_AssertionStatusDirectives::classes_offset; |
3099 |
3123 |
3100 // java_lang_System |
3124 // java_lang_System |
3101 java_lang_System::static_in_offset = java_lang_System::hc_static_in_offset * x; |
3125 java_lang_System::static_in_offset = java_lang_System::hc_static_in_offset * x; |
3102 java_lang_System::static_out_offset = java_lang_System::hc_static_out_offset * x; |
3126 java_lang_System::static_out_offset = java_lang_System::hc_static_out_offset * x; |
3103 java_lang_System::static_err_offset = java_lang_System::hc_static_err_offset * x; |
3127 java_lang_System::static_err_offset = java_lang_System::hc_static_err_offset * x; |
|
3128 java_lang_System::static_security_offset = java_lang_System::hc_static_security_offset * x; |
3104 |
3129 |
3105 // java_lang_StackTraceElement |
3130 // java_lang_StackTraceElement |
3106 java_lang_StackTraceElement::declaringClass_offset = java_lang_StackTraceElement::hc_declaringClass_offset * x + header; |
3131 java_lang_StackTraceElement::declaringClass_offset = java_lang_StackTraceElement::hc_declaringClass_offset * x + header; |
3107 java_lang_StackTraceElement::methodName_offset = java_lang_StackTraceElement::hc_methodName_offset * x + header; |
3132 java_lang_StackTraceElement::methodName_offset = java_lang_StackTraceElement::hc_methodName_offset * x + header; |
3108 java_lang_StackTraceElement::fileName_offset = java_lang_StackTraceElement::hc_fileName_offset * x + header; |
3133 java_lang_StackTraceElement::fileName_offset = java_lang_StackTraceElement::hc_fileName_offset * x + header; |
3298 // java.lang.System |
3323 // java.lang.System |
3299 |
3324 |
3300 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, in, "Ljava/io/InputStream;"); |
3325 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, in, "Ljava/io/InputStream;"); |
3301 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, out, "Ljava/io/PrintStream;"); |
3326 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, out, "Ljava/io/PrintStream;"); |
3302 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, err, "Ljava/io/PrintStream;"); |
3327 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, err, "Ljava/io/PrintStream;"); |
|
3328 CHECK_STATIC_OFFSET("java/lang/System", java_lang_System, security, "Ljava/lang/SecurityManager;"); |
3303 |
3329 |
3304 // java.lang.StackTraceElement |
3330 // java.lang.StackTraceElement |
3305 |
3331 |
3306 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, declaringClass, "Ljava/lang/String;"); |
3332 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, declaringClass, "Ljava/lang/String;"); |
3307 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, methodName, "Ljava/lang/String;"); |
3333 CHECK_OFFSET("java/lang/StackTraceElement", java_lang_StackTraceElement, methodName, "Ljava/lang/String;"); |