29 #include "classfile/classLoader.hpp"
30 #include "classfile/classLoaderData.inline.hpp"
31 #include "classfile/classLoaderExt.hpp"
32 #include "classfile/dictionary.hpp"
33 #include "classfile/javaClasses.inline.hpp"
34 #include "classfile/klassFactory.hpp"
35 #include "classfile/loaderConstraints.hpp"
36 #include "classfile/packageEntry.hpp"
37 #include "classfile/placeholders.hpp"
38 #include "classfile/resolutionErrors.hpp"
39 #include "classfile/stringTable.hpp"
40 #include "classfile/systemDictionary.hpp"
41 #include "classfile/vmSymbols.hpp"
42 #include "code/codeCache.hpp"
43 #include "compiler/compileBroker.hpp"
44 #include "gc/shared/gcLocker.hpp"
45 #include "gc/shared/gcTraceTime.inline.hpp"
46 #include "interpreter/bytecodeStream.hpp"
47 #include "interpreter/interpreter.hpp"
48 #include "logging/log.hpp"
49 #include "memory/filemap.hpp"
50 #include "memory/oopFactory.hpp"
51 #include "memory/resourceArea.hpp"
52 #include "oops/instanceKlass.hpp"
53 #include "oops/instanceRefKlass.hpp"
54 #include "oops/klass.inline.hpp"
55 #include "oops/methodData.hpp"
56 #include "oops/objArrayKlass.hpp"
57 #include "oops/objArrayOop.inline.hpp"
58 #include "oops/oop.inline.hpp"
59 #include "oops/symbol.hpp"
60 #include "oops/typeArrayKlass.hpp"
61 #include "prims/jvm.h"
62 #include "prims/jvmtiEnvBase.hpp"
63 #include "prims/resolvedMethodTable.hpp"
64 #include "prims/methodHandles.hpp"
65 #include "runtime/arguments.hpp"
66 #include "runtime/biasedLocking.hpp"
67 #include "runtime/fieldType.hpp"
68 #include "runtime/handles.inline.hpp"
415 MutexLocker mu(SystemDictionary_lock, THREAD);
416 placeholders()->find_and_remove(p_index, p_hash, child_name, loader_data, PlaceholderTable::LOAD_SUPER, THREAD);
417 SystemDictionary_lock->notify_all();
418 }
419 if (HAS_PENDING_EXCEPTION || superk == NULL) {
420 // can null superk
421 superk = handle_resolution_exception(class_name, true, superk, THREAD);
422 }
423
424 return superk;
425 }
426
427 void SystemDictionary::validate_protection_domain(InstanceKlass* klass,
428 Handle class_loader,
429 Handle protection_domain,
430 TRAPS) {
431 if(!has_checkPackageAccess()) return;
432
433 // Now we have to call back to java to check if the initating class has access
434 JavaValue result(T_VOID);
435 if (log_is_enabled(Debug, protectiondomain)) {
436 ResourceMark rm;
437 // Print out trace information
438 outputStream* log = Log(protectiondomain)::debug_stream();
439 log->print_cr("Checking package access");
440 log->print("class loader: "); class_loader()->print_value_on(log);
441 log->print(" protection domain: "); protection_domain()->print_value_on(log);
442 log->print(" loading: "); klass->print_value_on(log);
443 log->cr();
444 }
445
446 InstanceKlass* system_loader = SystemDictionary::ClassLoader_klass();
447 JavaCalls::call_special(&result,
448 class_loader,
449 system_loader,
450 vmSymbols::checkPackageAccess_name(),
451 vmSymbols::class_protectiondomain_signature(),
452 Handle(THREAD, klass->java_mirror()),
453 protection_domain,
454 THREAD);
455
456 if (HAS_PENDING_EXCEPTION) {
457 log_debug(protectiondomain)("DENIED !!!!!!!!!!!!!!!!!!!!!");
458 } else {
459 log_debug(protectiondomain)("granted");
460 }
461
462 if (HAS_PENDING_EXCEPTION) return;
463
|
29 #include "classfile/classLoader.hpp"
30 #include "classfile/classLoaderData.inline.hpp"
31 #include "classfile/classLoaderExt.hpp"
32 #include "classfile/dictionary.hpp"
33 #include "classfile/javaClasses.inline.hpp"
34 #include "classfile/klassFactory.hpp"
35 #include "classfile/loaderConstraints.hpp"
36 #include "classfile/packageEntry.hpp"
37 #include "classfile/placeholders.hpp"
38 #include "classfile/resolutionErrors.hpp"
39 #include "classfile/stringTable.hpp"
40 #include "classfile/systemDictionary.hpp"
41 #include "classfile/vmSymbols.hpp"
42 #include "code/codeCache.hpp"
43 #include "compiler/compileBroker.hpp"
44 #include "gc/shared/gcLocker.hpp"
45 #include "gc/shared/gcTraceTime.inline.hpp"
46 #include "interpreter/bytecodeStream.hpp"
47 #include "interpreter/interpreter.hpp"
48 #include "logging/log.hpp"
49 #include "logging/logStream.hpp"
50 #include "memory/filemap.hpp"
51 #include "memory/oopFactory.hpp"
52 #include "memory/resourceArea.hpp"
53 #include "oops/instanceKlass.hpp"
54 #include "oops/instanceRefKlass.hpp"
55 #include "oops/klass.inline.hpp"
56 #include "oops/methodData.hpp"
57 #include "oops/objArrayKlass.hpp"
58 #include "oops/objArrayOop.inline.hpp"
59 #include "oops/oop.inline.hpp"
60 #include "oops/symbol.hpp"
61 #include "oops/typeArrayKlass.hpp"
62 #include "prims/jvm.h"
63 #include "prims/jvmtiEnvBase.hpp"
64 #include "prims/resolvedMethodTable.hpp"
65 #include "prims/methodHandles.hpp"
66 #include "runtime/arguments.hpp"
67 #include "runtime/biasedLocking.hpp"
68 #include "runtime/fieldType.hpp"
69 #include "runtime/handles.inline.hpp"
416 MutexLocker mu(SystemDictionary_lock, THREAD);
417 placeholders()->find_and_remove(p_index, p_hash, child_name, loader_data, PlaceholderTable::LOAD_SUPER, THREAD);
418 SystemDictionary_lock->notify_all();
419 }
420 if (HAS_PENDING_EXCEPTION || superk == NULL) {
421 // can null superk
422 superk = handle_resolution_exception(class_name, true, superk, THREAD);
423 }
424
425 return superk;
426 }
427
428 void SystemDictionary::validate_protection_domain(InstanceKlass* klass,
429 Handle class_loader,
430 Handle protection_domain,
431 TRAPS) {
432 if(!has_checkPackageAccess()) return;
433
434 // Now we have to call back to java to check if the initating class has access
435 JavaValue result(T_VOID);
436 LogTarget(Debug, protectiondomain) lt;
437 if (lt.is_enabled()) {
438 ResourceMark rm;
439 // Print out trace information
440 LogStream ls(lt);
441 ls.print_cr("Checking package access");
442 ls.print("class loader: "); class_loader()->print_value_on(&ls);
443 ls.print(" protection domain: "); protection_domain()->print_value_on(&ls);
444 ls.print(" loading: "); klass->print_value_on(&ls);
445 ls.cr();
446 }
447
448 InstanceKlass* system_loader = SystemDictionary::ClassLoader_klass();
449 JavaCalls::call_special(&result,
450 class_loader,
451 system_loader,
452 vmSymbols::checkPackageAccess_name(),
453 vmSymbols::class_protectiondomain_signature(),
454 Handle(THREAD, klass->java_mirror()),
455 protection_domain,
456 THREAD);
457
458 if (HAS_PENDING_EXCEPTION) {
459 log_debug(protectiondomain)("DENIED !!!!!!!!!!!!!!!!!!!!!");
460 } else {
461 log_debug(protectiondomain)("granted");
462 }
463
464 if (HAS_PENDING_EXCEPTION) return;
465
|