kmod_info_t * loaded_kmod = NULL;
-
bootxDriverDataObject = OSDynamicCast(OSData,
propertyDict->getObject(memory_map_name));
// don't release bootxDriverDataObject
/* Check if kmod is already loaded and is a real loadable one (has
* an address).
*/
- loaded_kmod = kmod_lookupbyname(driverName->getCStringNoCopy());
+ loaded_kmod = kmod_lookupbyname_locked(driverName->getCStringNoCopy());
if (loaded_kmod && loaded_kmod->address) {
IOLog("Skipping new extension \"%s\"; an extension named "
"\"%s\" is already loaded.\n",
finish:
+ if (loaded_kmod) {
+ kfree(loaded_kmod, sizeof(kmod_info_t));
+ }
+
// do not release bootxDriverDataObject
// do not release driverName
result = false;
goto finish;
}
+ uncompressed_file[uncompressed_size] = '\0';
} else {
bcopy(base_address + offset, uncompressed_file,
- compsize);
+ realsize);
+ uncompressed_file[realsize] = '\0';
}
- uncompressed_file[uncompressed_size] = '\0';
*file = uncompressedFile;
mkext_kext * onekext_data = 0; // don't free
mkext_file * plist_file = 0; // don't free
mkext_file * module_file = 0; // don't free
+ kmod_info_t * loaded_kmod = 0; // must free
+
OSData * driverPlistDataObject = 0; // must release
OSDictionary * driverPlist = 0; // must release
OSData * driverCode = 0; // must release
i < OSSwapBigToHostInt32(mkext_data->numkexts);
i++) {
- kmod_info_t * loaded_kmod = 0;
+ if (loaded_kmod) {
+ kfree(loaded_kmod, sizeof(kmod_info_t));
+ loaded_kmod = 0;
+ }
if (driverPlistDataObject) {
driverPlistDataObject->release();
/* Check if kmod is already loaded and is a real loadable one (has
* an address).
*/
- loaded_kmod = kmod_lookupbyname(moduleName->getCStringNoCopy());
+ loaded_kmod = kmod_lookupbyname_locked(moduleName->getCStringNoCopy());
if (loaded_kmod && loaded_kmod->address) {
IOLog("Skipping new extension \"%s\"; an extension named "
"\"%s\" is already loaded.\n",
finish:
+ if (loaded_kmod) kfree(loaded_kmod, sizeof(kmod_info_t));
if (driverPlistDataObject) driverPlistDataObject->release();
if (driverPlist) driverPlist->release();
if (driverCode) driverCode->release();
startupExtensions = getStartupExtensions();
if (!startupExtensions) {
- IOLog("Can't record extension archive; there is no
- extensions dictionary.\n");
+ IOLog("Can't record extension archive; there is no"
+ " extensions dictionary.\n");
LOG_DELAY();
result = false;
goto finish;
while ( (key = OSDynamicCast(OSString,
keyIterator->getNextObject())) ) {
-
/* Clear newDriverDict & mkextExtensions upon entry to the loop,
* handling both successful and unsuccessful iterations.
*/
// Do not release key.
- } /* while ( (key = OSDynamicCast(OSString, ... */
+ } /* while ( (key = OSDynamicCast(OSString, ...) ) ) */
if (!mergeExtensionDictionaries(existingExtensions, startupExtensions)) {
IOLog("Error: Failed to merge new extensions into existing set.\n");
keyIterator = OSCollectionIterator::withCollection(
extensionPersonalities);
if (!keyIterator) {
- IOLog("Error: Couldn't allocate iterator to scan
- personalities for %s.\n", extensionName);
+ IOLog("Error: Couldn't allocate iterator to scan"
+ " personalities for %s.\n", extensionName);
LOG_DELAY();
}