]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crypto: allow PK11 module to load even if it's already initialized
authorKefu Chai <kchai@redhat.com>
Wed, 21 Jun 2017 06:25:01 +0000 (14:25 +0800)
committerKefu Chai <kchai@redhat.com>
Fri, 23 Jun 2017 03:31:07 +0000 (11:31 +0800)
there is chance that other pieces of application loads PK11 module
already and does not finalize it before calling common_init_finish().

also, upon fork, PK11 module resets its entire status including `nsc_init`,
by which PK11 module tell if it is initialized or not. so the behavior
of NSS_InitContext() could be different before and after fork. that's
another reason to ignore CKR_CRYPTOKI_ALREADY_INITIALIZED error (see
NSS_GetError()).

Fixes: http://tracker.ceph.com/issues/19741
Signed-off-by: Kefu Chai <kchai@redhat.com>
src/common/ceph_crypto.cc

index 849d5fe704811d165fc4e6a57fc3a2f3b3f2dfa8..a0aa8767e428f42b1df583aa1e7a26fce7311777 100644 (file)
@@ -60,7 +60,7 @@ void ceph::crypto::init(CephContext *cct)
     memset(&init_params, 0, sizeof(init_params));
     init_params.length = sizeof(init_params);
 
-    uint32_t flags = NSS_INIT_READONLY;
+    uint32_t flags = (NSS_INIT_READONLY | NSS_INIT_PK11RELOAD);
     if (cct->_conf->nss_db_path.empty()) {
       flags |= (NSS_INIT_NOCERTDB | NSS_INIT_NOMODDB);
     }