RFR: 8195690: JNI GetObjectRefType doesn't handle NULL

Kim Barrett kim.barrett at oracle.com
Tue Jan 23 01:22:02 UTC 2018


> On Jan 22, 2018, at 5:29 PM, David Holmes <david.holmes at oracle.com> wrote:
> 
> Hi Kim,
> 
> As a general rule JNI does not do argument checking. You pass crud then you may crash:
> 
> "The programmer must not pass illegal pointers or arguments of the wrong type to JNI functions. Doing so could result in arbitrary consequences, including a corrupted system state or VM crash."
> 
> https://docs.oracle.com/javase/9/docs/specs/jni/design.html#reporting-programming-errors

GetObjectRefType is specified to return JNIInvalidRefType when called with a NULL argument:
https://docs.oracle.com/javase/9/docs/specs/jni/functions.html#getobjectreftype

The bug was discovered by a failing JCK test; we are asserting (or possibly invoking undefined behavior) without this change.

> David
> -----
> 
> On 23/01/2018 8:24 AM, Kim Barrett wrote:
>> Please review this fix of GetObjectRefType when applied to a NULL
>> handle argument.  It should return JNIInvalidRefType, but was instead
>> asserting in debug builds, and maybe worse things in release builds.
>> In addition to making GetObjectRefType handle NULL properly, various
>> functions in JNIHandles and OopStorage now have non-NULL handle argument
>> preconditions and corresponding assertions.
>> CR:
>> https://bugs.openjdk.java.net/browse/JDK-8195690
>> Webrev:
>> http://cr.openjdk.java.net/~kbarrett/8195690/open.00/
>> Testing:
>> Mach5 {hs,jdk}-tier{1,2,3}
>> Locally ran JCK vm/jni tests
>> Locally ran tonga vm.runtime tests for jni tests




More information about the hotspot-runtime-dev mailing list