]> git.saurik.com Git - apple/security.git/blobdiff - Security/libsecurity_codesigning/lib/codedirectory.cpp
Security-57031.30.12.tar.gz
[apple/security.git] / Security / libsecurity_codesigning / lib / codedirectory.cpp
index d48d7dea9370f9369d0ae3a7edfbfab94490a193..28a91f07cc3ee90e18b81a9ecdbd6ff7ff63c7e7 100644 (file)
@@ -160,6 +160,18 @@ void CodeDirectory::checkIntegrity() const
                if (!contains((*this)[pagesConsumed-1], hashSize))      // referenced too many main hash slots
                        MacOSError::throwMe(errSecCSSignatureFailed);
        }
+       
+       // check consistency between the page-coverage fields
+       if (pageSize) {
+               if (codeLimit == 0)                                                                     // can't have paged signatures with no covered data
+                       MacOSError::throwMe(errSecCSSignatureFailed);
+               size_t coveredPages = ((codeLimit-1) >> pageSize) + 1; // page slots required to cover codeLimit
+               if (coveredPages != nCodeSlots)
+                       MacOSError::throwMe(errSecCSSignatureFailed);
+       } else {
+               if ((codeLimit > 0) != nCodeSlots)      // must have one code slot, or none if no code
+                       MacOSError::throwMe(errSecCSSignatureFailed);
+       }
 }