diff --git a/jdk/src/share/classes/java/rmi/dgc/VMID.java b/jdk/src/share/classes/java/rmi/dgc/VMID.java index 41a19e6d205..45e58599d66 100644 --- a/jdk/src/share/classes/java/rmi/dgc/VMID.java +++ b/jdk/src/share/classes/java/rmi/dgc/VMID.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,10 +25,8 @@ package java.rmi.dgc; -import java.io.*; -import java.net.*; import java.rmi.server.UID; -import java.security.*; +import java.security.SecureRandom; /** * A VMID is a identifier that is unique across all Java virtual @@ -39,9 +37,8 @@ import java.security.*; * @author Peter Jones */ public final class VMID implements java.io.Serializable { - - /** array of bytes uniquely identifying this host */ - private static byte[] localAddr = computeAddressHash(); + /** Array of bytes uniquely identifying this host */ + private static final byte[] randomBytes; /** * @serial array of bytes uniquely identifying host created on @@ -56,6 +53,14 @@ public final class VMID implements java.io.Serializable { /** indicate compatibility with JDK 1.1.x version of class */ private static final long serialVersionUID = -538642295484486218L; + static { + // Generate 8 bytes of random data. + SecureRandom secureRandom = new SecureRandom(); + byte bytes[] = new byte[8]; + secureRandom.nextBytes(bytes); + randomBytes = bytes; + } + /** * Create a new VMID. Each new VMID returned from this constructor * is unique for all Java virtual machines under the following @@ -65,7 +70,7 @@ public final class VMID implements java.io.Serializable { * for the lifetime of this object.
*/
public VMID() {
- addr = localAddr;
+ addr = randomBytes;
uid = new UID();
}
@@ -126,52 +131,4 @@ public final class VMID implements java.io.Serializable {
result.append(uid.toString());
return result.toString();
}
-
- /**
- * Compute the hash an IP address. The hash is the first 8 bytes
- * of the SHA digest of the IP address.
- */
- private static byte[] computeAddressHash() {
-
- /*
- * Get the local host's IP address.
- */
- byte[] addr = java.security.AccessController.doPrivileged(
- new PrivilegedAction