8203182: Release session if initialization of SunPKCS11 Signature fails

Ensure session is properly released in P11Signature class

Reviewed-by: valeriep
This commit is contained in:
Martin Balao 2018-06-01 19:46:31 +00:00
parent f03c183e28
commit 62c97f695f

View File

@ -283,6 +283,7 @@ final class P11Signature extends SignatureSpi {
session = token.killSession(session);
return;
}
try {
// "cancel" operation by finishing it
// XXX make sure all this always works correctly
if (mode == M_SIGN) {
@ -325,6 +326,9 @@ final class P11Signature extends SignatureSpi {
// XXX check error code
}
}
} finally {
session = token.releaseSession(session);
}
}
// assumes current state is initialized == false
@ -342,6 +346,8 @@ final class P11Signature extends SignatureSpi {
}
initialized = true;
} catch (PKCS11Exception e) {
// release session when initialization failed
session = token.releaseSession(session);
throw new ProviderException("Initialization failed", e);
}
if (bytesProcessed != 0) {
@ -511,6 +517,8 @@ final class P11Signature extends SignatureSpi {
}
bytesProcessed += len;
} catch (PKCS11Exception e) {
initialized = false;
session = token.releaseSession(session);
throw new ProviderException(e);
}
break;
@ -559,6 +567,8 @@ final class P11Signature extends SignatureSpi {
bytesProcessed += len;
byteBuffer.position(ofs + len);
} catch (PKCS11Exception e) {
initialized = false;
session = token.releaseSession(session);
throw new ProviderException("Update failed", e);
}
break;