|
80 | 80 | import javax.security.auth.callback.CallbackHandler; |
81 | 81 | import javax.security.auth.login.Configuration; |
82 | 82 |
|
83 | | -import jdk.graal.compiler.options.Option; |
84 | 83 | import org.graalvm.nativeimage.ImageSingletons; |
85 | 84 | import org.graalvm.nativeimage.hosted.RuntimeJNIAccess; |
86 | 85 | import org.graalvm.nativeimage.hosted.RuntimeReflection; |
|
107 | 106 | import com.oracle.svm.util.ModuleSupport; |
108 | 107 | import com.oracle.svm.util.ReflectionUtil; |
109 | 108 |
|
| 109 | +import jdk.graal.compiler.options.Option; |
110 | 110 | import sun.security.jca.ProviderList; |
111 | 111 | import sun.security.provider.NativePRNG; |
112 | 112 | import sun.security.x509.OIDMap; |
@@ -239,63 +239,50 @@ public void duringSetup(DuringSetupAccess a) { |
239 | 239 | RuntimeClassInitializationSupport rci = ImageSingletons.lookup(RuntimeClassInitializationSupport.class); |
240 | 240 | /* |
241 | 241 | * The SecureRandom implementations open the /dev/random and /dev/urandom files which are |
242 | | - * used as sources for entropy. These files are opened in the static initializers. That's |
243 | | - * why we rerun the static initializers at runtime. We cannot completely delay the static |
244 | | - * initializers execution to runtime because the SecureRandom classes are needed by the |
245 | | - * native image generator too, e.g., by Files.createTempDirectory(). |
| 242 | + * used as sources for entropy. These files are opened in the static initializers. |
246 | 243 | */ |
247 | | - rci.rerunInitialization(NativePRNG.class, "for substitutions"); |
248 | | - rci.rerunInitialization(NativePRNG.Blocking.class, "for substitutions"); |
249 | | - rci.rerunInitialization(NativePRNG.NonBlocking.class, "for substitutions"); |
| 244 | + rci.initializeAtRunTime(NativePRNG.class, "for substitutions"); |
| 245 | + rci.initializeAtRunTime(NativePRNG.Blocking.class, "for substitutions"); |
| 246 | + rci.initializeAtRunTime(NativePRNG.NonBlocking.class, "for substitutions"); |
250 | 247 |
|
251 | | - rci.rerunInitialization(clazz(access, "sun.security.provider.SeedGenerator"), "for substitutions"); |
252 | | - rci.rerunInitialization(clazz(access, "sun.security.provider.SecureRandom$SeederHolder"), "for substitutions"); |
| 248 | + rci.initializeAtRunTime(clazz(access, "sun.security.provider.SeedGenerator"), "for substitutions"); |
| 249 | + rci.initializeAtRunTime(clazz(access, "sun.security.provider.SecureRandom$SeederHolder"), "for substitutions"); |
253 | 250 |
|
254 | 251 | /* |
255 | 252 | * sun.security.provider.AbstractDrbg$SeederHolder has a static final EntropySource seeder |
256 | | - * field that needs to be re-initialized at run time because it captures the result of |
| 253 | + * field that needs to be initialized at run time because it captures the result of |
257 | 254 | * SeedGenerator.getSystemEntropy(). |
258 | 255 | */ |
259 | | - rci.rerunInitialization(clazz(access, "sun.security.provider.AbstractDrbg$SeederHolder"), "for substitutions"); |
| 256 | + rci.initializeAtRunTime(clazz(access, "sun.security.provider.AbstractDrbg$SeederHolder"), "for substitutions"); |
260 | 257 | if (isMscapiModulePresent) { |
261 | 258 | /* PRNG.<clinit> creates a Cleaner (see JDK-8210476), which starts its thread. */ |
262 | | - rci.rerunInitialization(clazz(access, "sun.security.mscapi.PRNG"), "for substitutions"); |
| 259 | + rci.initializeAtRunTime(clazz(access, "sun.security.mscapi.PRNG"), "for substitutions"); |
263 | 260 | } |
264 | | - rci.rerunInitialization(clazz(access, "sun.security.provider.FileInputStreamPool"), "for substitutions"); |
| 261 | + rci.initializeAtRunTime(clazz(access, "sun.security.provider.FileInputStreamPool"), "for substitutions"); |
265 | 262 | /* java.util.UUID$Holder has a static final SecureRandom field. */ |
266 | | - rci.rerunInitialization(clazz(access, "java.util.UUID$Holder"), "for substitutions"); |
| 263 | + rci.initializeAtRunTime(clazz(access, "java.util.UUID$Holder"), "for substitutions"); |
267 | 264 |
|
268 | | - /* |
269 | | - * The classes below have a static final SecureRandom field. Note that if the classes are |
270 | | - * not found as reachable by the analysis registering them for class initialization rerun |
271 | | - * doesn't have any effect. |
272 | | - */ |
273 | | - rci.rerunInitialization(clazz(access, "sun.security.jca.JCAUtil$CachedSecureRandomHolder"), "for substitutions"); |
274 | | - rci.rerunInitialization(clazz(access, "com.sun.crypto.provider.SunJCE$SecureRandomHolder"), "for substitutions"); |
275 | | - optionalClazz(access, "sun.security.krb5.Confounder").ifPresent(clazz -> rci.rerunInitialization(clazz, "for substitutions")); |
276 | | - optionalClazz(access, "sun.security.krb5.Config").ifPresent(clazz -> rci.rerunInitialization(clazz, "Reset the value of lazily initialized field sun.security.krb5.Config#singleton")); |
| 265 | + /* The classes below have a static final SecureRandom field. */ |
| 266 | + rci.initializeAtRunTime(clazz(access, "sun.security.jca.JCAUtil$CachedSecureRandomHolder"), "for substitutions"); |
| 267 | + rci.initializeAtRunTime(clazz(access, "com.sun.crypto.provider.SunJCE$SecureRandomHolder"), "for substitutions"); |
| 268 | + optionalClazz(access, "sun.security.krb5.Confounder").ifPresent(clazz -> rci.initializeAtRunTime(clazz, "for substitutions")); |
| 269 | + optionalClazz(access, "sun.security.krb5.Config").ifPresent(clazz -> rci.initializeAtRunTime(clazz, "Reset the value of lazily initialized field sun.security.krb5.Config#singleton")); |
277 | 270 |
|
278 | | - rci.rerunInitialization(clazz(access, "sun.security.jca.JCAUtil"), "JCAUtil.def holds a SecureRandom."); |
| 271 | + rci.initializeAtRunTime(clazz(access, "sun.security.jca.JCAUtil"), "JCAUtil.def holds a SecureRandom."); |
279 | 272 |
|
280 | 273 | /* |
281 | 274 | * When SSLContextImpl$DefaultManagersHolder sets-up the TrustManager in its initializer it |
282 | 275 | * gets the value of the -Djavax.net.ssl.trustStore and -Djavax.net.ssl.trustStorePassword |
283 | | - * properties from the build machine. Re-runing its initialization at run time is required |
284 | | - * to use the run time provided values. |
| 276 | + * properties from the build machine. Running its initialization at run time is required to |
| 277 | + * use the run time provided values. |
285 | 278 | */ |
286 | | - rci.rerunInitialization(clazz(access, "sun.security.ssl.SSLContextImpl$DefaultManagersHolder"), "for reading properties at run time"); |
| 279 | + rci.initializeAtRunTime(clazz(access, "sun.security.ssl.SSLContextImpl$DefaultManagersHolder"), "for reading properties at run time"); |
287 | 280 |
|
288 | 281 | /* |
289 | 282 | * SSL debug logging enabled by javax.net.debug system property is setup during the class |
290 | | - * initialization of either sun.security.ssl.Debug or sun.security.ssl.SSLLogger. (In JDK 8 |
291 | | - * this was implemented in sun.security.ssl.Debug, the logic was moved to |
292 | | - * sun.security.ssl.SSLLogger in JDK11 but not yet backported to all JDKs. See JDK-8196584 |
293 | | - * for details.) We cannot prevent these classes from being initialized at image build time, |
294 | | - * so we have to reinitialize them at run time to honour the run time passed value for the |
295 | | - * javax.net.debug system property. |
| 283 | + * initialization. |
296 | 284 | */ |
297 | | - optionalClazz(access, "sun.security.ssl.Debug").ifPresent(c -> rci.rerunInitialization(c, "for reading properties at run time")); |
298 | | - optionalClazz(access, "sun.security.ssl.SSLLogger").ifPresent(c -> rci.rerunInitialization(c, "for reading properties at run time")); |
| 285 | + rci.initializeAtRunTime(clazz(access, "sun.security.ssl.SSLLogger"), "for reading properties at run time"); |
299 | 286 | } |
300 | 287 |
|
301 | 288 | @Override |
|
0 commit comments