hg: valhalla/valhalla/jdk: Enhancement: improve MH access checks w.r.t. classes defined with Unsafe.dAC

Remi Forax forax at univ-mlv.fr
Tue Jun 16 08:27:50 UTC 2015


Hi Maurizio,
using 7 classes here is in my opinion overkill

what about something like this ?

// you can add documentation here, more readable IMO
interface VisibilityCheck {
   boolean test(Class<?> c1, Class<?> c2);
}

enum VisibiltyChecks implements VisibilityCheck {
   CLASS_EQUALS,
   ASSIGNABLE,
   SAME_PACKAGE,
   SAME_PACKAGE_MEMBER,
   RELATED_CLASS,
   SUBCLASS
   ;

   @Overrides
   public boolean test(Class<?> c1, Class<?> c2) {
     switch(this) {
       case CLASS_EQUALS:
         return c1 == c2;
       case ASSIGNABLE:
         return c1.isAssignable(c2);
       ...
       default:
         throw new AssertionError();
     }
   }
}

private static final VisibilityCheck classAccessible(int allowedModes) {
        return new VisibilityCheck() {
            @Override
            public boolean test(Class<?> c1, Class<?> c2) {
                return isClassAccessible(c1, c2, allowedModes);
            }
        };
    }

public static boolean walkHostClass(Class<?> c, Class<?> lookupClass, 
VisibilityCheck p) {
        for(;lookupClass != null; lookupClass = 
UNSAFE.getHostClass(lookupClass)) {
            if (p.test(c, lookupClass)) {
                return true;
            }
        }
        return false;
    }

regards,
Rémi

On 06/15/2015 08:00 PM, maurizio.cimadamore at oracle.com wrote:
> Changeset: c28ea949f8cc
> Author:    mcimadamore
> Date:      2015-06-15 19:00 +0100
> URL:       http://hg.openjdk.java.net/valhalla/valhalla/jdk/rev/c28ea949f8cc
>
> Enhancement: improve MH access checks w.r.t. classes defined with Unsafe.dAC
> * Add new Unsafe.getHostClass() method (see related VM patch)
> * Added recursive access check logic that walks through the hostclass chain
>
> ! src/java.base/share/classes/java/lang/invoke/MethodHandles.java
> ! src/java.base/share/classes/sun/invoke/util/VerifyAccess.java
> ! src/java.base/share/classes/sun/misc/Unsafe.java
>



More information about the valhalla-dev mailing list