]> git.saurik.com Git - apple/security.git/blobdiff - OSX/libsecurity_cdsa_utilities/lib/objectacl.cpp
Security-58286.20.16.tar.gz
[apple/security.git] / OSX / libsecurity_cdsa_utilities / lib / objectacl.cpp
index 91cecb6d5d0b1783f1a4b28048f27805af059d4b..80989e2d2895bd01ef49536870653ce64969a2fc 100644 (file)
@@ -29,6 +29,7 @@
 #include <security_cdsa_utilities/cssmbridge.h>
 #include <security_utilities/endian.h>
 #include <security_utilities/debugging.h>
+#include <security_utilities/threading.h>
 #include <algorithm>
 #include <cstdarg>
 
@@ -42,6 +43,7 @@ using namespace DataWalkers;
 // These are the kinds of ACL subjects we can deal with.
 //
 ModuleNexus<ObjectAcl::MakerMap> ObjectAcl::makers;
+NormalMutex ObjectAcl::makersMutex;
 
 
 //
@@ -577,6 +579,7 @@ void ObjectAcl::AclEntry::importBlob(Reader &pub, Reader &priv)
 AclSubject::Maker::Maker(CSSM_ACL_SUBJECT_TYPE type)
        : mType(type)
 {
+    StLock<Mutex> _(ObjectAcl::makersMutex);
     ObjectAcl::makers()[type] = this;
 }
 
@@ -595,6 +598,7 @@ AclSubject *ObjectAcl::make(uint32 typeAndVersion, Reader &pub, Reader &priv)
 
 AclSubject::Maker &ObjectAcl::makerFor(CSSM_ACL_SUBJECT_TYPE type)
 {
+    StLock<Mutex> _(ObjectAcl::makersMutex);
     AclSubject::Maker *maker = makers()[type];
     if (maker == NULL)
         CssmError::throwMe(CSSM_ERRCODE_ACL_SUBJECT_TYPE_NOT_SUPPORTED);