提交 fef4b20b 编写于 作者: I igerasim

8203182: Release session if initialization of SunPKCS11 Signature fails

Summary: Ensure session is properly released in P11Signature class
Reviewed-by: valeriep
Contributed-by: NMartin Balao <mbalao@redhat.com>
上级 590881fd
...@@ -257,6 +257,7 @@ final class P11Signature extends SignatureSpi { ...@@ -257,6 +257,7 @@ final class P11Signature extends SignatureSpi {
session = token.killSession(session); session = token.killSession(session);
return; return;
} }
try {
// "cancel" operation by finishing it // "cancel" operation by finishing it
// XXX make sure all this always works correctly // XXX make sure all this always works correctly
if (mode == M_SIGN) { if (mode == M_SIGN) {
...@@ -299,6 +300,9 @@ final class P11Signature extends SignatureSpi { ...@@ -299,6 +300,9 @@ final class P11Signature extends SignatureSpi {
// XXX check error code // XXX check error code
} }
} }
} finally {
session = token.releaseSession(session);
}
} }
// assumes current state is initialized == false // assumes current state is initialized == false
...@@ -316,6 +320,8 @@ final class P11Signature extends SignatureSpi { ...@@ -316,6 +320,8 @@ final class P11Signature extends SignatureSpi {
} }
initialized = true; initialized = true;
} catch (PKCS11Exception e) { } catch (PKCS11Exception e) {
// release session when initialization failed
session = token.releaseSession(session);
throw new ProviderException("Initialization failed", e); throw new ProviderException("Initialization failed", e);
} }
if (bytesProcessed != 0) { if (bytesProcessed != 0) {
...@@ -476,6 +482,8 @@ final class P11Signature extends SignatureSpi { ...@@ -476,6 +482,8 @@ final class P11Signature extends SignatureSpi {
} }
bytesProcessed += len; bytesProcessed += len;
} catch (PKCS11Exception e) { } catch (PKCS11Exception e) {
initialized = false;
session = token.releaseSession(session);
throw new ProviderException(e); throw new ProviderException(e);
} }
break; break;
...@@ -523,6 +531,8 @@ final class P11Signature extends SignatureSpi { ...@@ -523,6 +531,8 @@ final class P11Signature extends SignatureSpi {
bytesProcessed += len; bytesProcessed += len;
byteBuffer.position(ofs + len); byteBuffer.position(ofs + len);
} catch (PKCS11Exception e) { } catch (PKCS11Exception e) {
initialized = false;
session = token.releaseSession(session);
throw new ProviderException("Update failed", e); throw new ProviderException("Update failed", e);
} }
break; break;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册