RFR: 8240256: Better resource cleaning for SunPKCS11 Provider

Valerie Peng valeriep at openjdk.java.net
Tue Apr 27 06:29:46 UTC 2021


On Fri, 16 Apr 2021 11:24:57 GMT, Sean Coffey <coffeys at openjdk.org> wrote:

> Added capability to allow the PKCS11 Token to be destroyed once a session is logged out from. New configuration properties via pkcs11 config file. Cleaned up the native resource poller also.
> 
> New unit test case to test behaviour. Some PKCS11 tests refactored to allow pkcs11 provider to be configured (and tested) with a config file of choice.
> 
> Reviewer request @valeriepeng

Here are some comments. Mostly just nit. Will continue looking at the test changes. 
Thanks~ 
Valerie

src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/Config.java line 434:

> 432:                     throw excLine(word + " must be at least 100 ms");
> 433:                 }
> 434:             } else if (word.endsWith("cleaner.shortInterval")) {

Why use endsWith()? Most of other parsing code are enforcing equality, i.e. equals()?

src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/KeyCache.java line 2:

> 1: /*
> 2:  * Copyright (c) 2003, 2020, Oracle and/or its affiliates. All rights reserved.

2021? Same goes for other files.

src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11Key.java line 176:

> 174:             found = true;
> 175:             next.dispose();
> 176:         }

nit: maybe this can be shortened a little with:
SessionKeyRef next;
while ((next = (SessionKeyRef) SessionKeyRef.refQueue.poll()) != null) {
    found = true;
    next.dispose();
}

Same goes for the other drainRefQueue() impl.

src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/Session.java line 133:

> 131:     }
> 132: 
> 133:     static boolean drainRefQueue() {

Add a comment on this being called by the cleaner thread with the two interval configuration options? Sames goes for the one in P11Key.java.

src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/Session.java line 152:

> 150:         implements Comparable<SessionRef> {
> 151: 
> 152:     static ReferenceQueue<Session> refQueue =

nit: can now move the value assignment onto the same line. Same goes for the refQueue in P11Key.java.

src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/SessionManager.java line 246:

> 244:         private final AbstractQueue<Session> pool;
> 245:         private final int SESSION_MAX = 5;
> 246:         // access is synchronized on 'this'

Maybe old comment?

src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/SunPKCS11.java line 963:

> 961:         private long sleepMillis = config.getResourceCleanerShortInterval();
> 962:         private int count = 0;
> 963:         boolean p11RefFound, SessRefFound;

nit: p11RefFound => keyRefFound?
nit: SessRefFound => sessRefFound?

src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/SunPKCS11.java line 992:

> 990:                     // increase the sleep time
> 991:                     sleepMillis = config.getResourceCleanerLongInterval();
> 992:                 }

This if-check can be moved up to below the line "count++;"?

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

PR: https://git.openjdk.java.net/jdk/pull/3544



More information about the security-dev mailing list