RFR: JDK-8315897: some PrivilegedActions missing in JDK code for getting properties

Matthias Baesken mbaesken at openjdk.org
Fri Sep 8 11:01:38 UTC 2023


On Fri, 8 Sep 2023 08:26:16 GMT, Matthias Baesken <mbaesken at openjdk.org> wrote:

> There are some remaining places in 'general' JDK code (= code not related to e.g. a specific tool) getting properties like :
> 
> osName = System.getProperty(os.name)
> 
> https://github.com/openjdk/jdk/blob/master/src/java.management/share/classes/sun/management/VMManagementImpl.java#L225
> 
> https://github.com/openjdk/jdk/blob/master/src/java.desktop/share/classes/sun/awt/FontConfiguration.java#L134
> 
> Those should be a PrivilegedAction .

Hi Alan, seems the calling into the VMManagement methods does not work any more in recent JDK (in 8 it was still possible in a kind of hack-like way but I tried it with 21 and it does not work any more (or maybe with setting lots of flags?)  ).


import sun.management.VMManagement;
import java.lang.management.*;
import java.lang.reflect.*;
import java.security.*;

public class VMExample {

    static class MySm extends SecurityManager {
        public void checkPermission(Permission p) {
           // okay
        }

        @Override
        public void checkPropertyAccess(String key) {
            System.out.println("accessing " + key);
            // throw new SecurityException("accessing " + key);
        }
    }

    private static void printInfo() {
      try {
        // Get the current process id using a reflection hack
        RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
        Field jvm = runtime.getClass().getDeclaredField("jvm");
        jvm.setAccessible(true);

        System.out.println("Getting VMManagement object");
        VMManagement mgmt = (sun.management.VMManagement) jvm.get(runtime);
        System.out.println("OS name:" + mgmt.getOsName());
      } catch(Exception ex) {
      }
    }

    public static void main(String[] args) {
        //System.setSecurityManager(new SecurityManager());
        System.setSecurityManager(new MySm());
        System.out.println("Before printInfo ...");
        printInfo();
    }
}


So probably we could avoid changing  VMManagementImpl.java because it is not needed any more at least in jdk-head .

-------------

PR Comment: https://git.openjdk.org/jdk/pull/15629#issuecomment-1711480332


More information about the client-libs-dev mailing list