RFR 8051012: Regression in verifier for <init> method call from inside of a branch

harold seigel harold.seigel at oracle.com
Thu Jul 24 12:46:36 UTC 2014


Hi,

Please review this verifier fix for bug 8051012.  The fix has two 
parts.  The first part adds another argument to function 
match_stackmap() which specifies whether or not the stackmap being 
matched is for an exception handler.  If the targetted stackmap is an 
exception handler then matches are allowed even if the stackmap flags 
differ  (See JVMS 8 section 4.10.1.4 
<http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.10.1.4>). 
An additional argument was needed because the existing stackmap matching 
code was erroneously allowing flag differences when matching branch 
target stackmaps for bytecodes such as 'goto'.  The additional argument 
lets the verifier differentiate between exception handler stackmaps and 
branch stackmaps.

The second part of the fix removes the check for branch targets jumping 
over constructor calls to super()  (the furthest_jump code).  This fix 
was intended for security but broke legal programs.  Removing the fix 
allows legal programs to work.  The needed security is provided by the 
above fix for stackmap matching.

Bug:  https://bugs.openjdk.java.net/browse/JDK-8051012
Open webrev: http://cr.openjdk.java.net/~hseigel/bug_8051012/

The fix was tested with the JCK lang, vm, and api/java_lang tests, the 
UTE verifier and quick tests, the JTREG hotspot tests, including tests 
that reproduce the security issue and one for legal programs broken by 
the 'furthest_jump' code fix.

Thanks, Harold


More information about the hotspot-runtime-dev mailing list