gcj-security and some issues

Jakob Praher jpraher@yahoo.de
Mon Apr 26 22:19:00 GMT 2004

hi all,

today I played a little bit with the current (cvs-head) implementaiton
of gcj and the security model.

fortunately I found some of the things like
* ProtectionDomain
* CodeSource
* Permission

are already there.

The gratest problem I'am facing now is, getting to know gcj internals 
better. I found the --save-temps option useful, but not terrific.
Objdump -d on the other hand showed a more complete picture, but only
includes local method call names. ltrace showed a funny picture:

_Jv_RegisterClasses( ... )
__libc_start_main( ... )
_Jv_RegisterClasses( ... )
JvRunMain( ... )

* Obviously the _Jv_RunMain sets up the system. It calls
_Jv_CreateJavaVM. But which routines call the _Jv_RegisterClasses, since
the _Jv_CreateJavaVM already assumes a setuped jclass. 

* why is the call from __libc_start_main between 2 _Jv_RegisterClasses

My current observation:

In current gcj executables every class loaded (in java jargon) from the
system loader (classpath in interpreters), has a ProtectionDomain with a
CodeSource of null. According to my book (J2SE Security) and to a
testcase I've written, system loaded classes' CodeSource should be the
location of the class file.

I think it would be better to actually point the CodeSource to the
location of the native executable/shared object, since this is where
this instance is comming from. Because compilation may happen on another
machine the location of the original jar/class/java file is not an
option here. (gij is another thing)

This would at least enable an admin, to specifiy the location of the
shared object/executable as the codebase of the policy grant. 
For instance

an application loaded from:

could get different permissions than

and so on.

I was wondering whether it would be possible to track whether a
executing method comes from a java source or from a native source
(natXX.cc). I could imagine the compiler could support this, since it
knows whether a Method is defined using Foo.java or natFoo.cc. To keep
the system secure, this information should be write protected, (though I
have not much experience in doing that), since this would prevent
"malicious" native code from changing its origin to java etc.
Any thoughts here?

-- Jakob

More information about the Java mailing list