]> git.saurik.com Git - apple/xnu.git/blobdiff - iokit/Kernel/RootDomainUserClient.cpp
xnu-3789.31.2.tar.gz
[apple/xnu.git] / iokit / Kernel / RootDomainUserClient.cpp
index ae122f4c1494b218e69b15de9379c550ad578fcd..ecd0cc1f36a8c74c87620bacefd9a1f1a662bca8 100644 (file)
@@ -216,14 +216,19 @@ IOReturn RootDomainUserClient::secureGetSystemSleepType(
 
 IOReturn RootDomainUserClient::clientClose( void )
 {
-    detach(fOwner);
+    terminate();
 
+    return kIOReturnSuccess;
+}
+
+void RootDomainUserClient::stop( IOService *provider)
+{
     if(fOwningTask) {
         task_deallocate(fOwningTask);
         fOwningTask = 0;
     }
 
-    return kIOReturnSuccess;
+    super::stop(provider);
 }
 
 IOReturn RootDomainUserClient::externalMethod(
@@ -299,10 +304,13 @@ IOReturn RootDomainUserClient::externalMethod(
                     (uint32_t *)&arguments->scalarOutput[0]);
             break;
         case kPMSetMaintenanceWakeCalendar:
-            ret = this->secureSetMaintenanceWakeCalendar(
-                    (IOPMCalendarStruct *)arguments->structureInput,
-                    (uint32_t *)&arguments->structureOutput);
-            arguments->structureOutputSize = sizeof(uint32_t);
+            if ((arguments->structureInputSize >= sizeof(IOPMCalendarStruct)) &&
+                (arguments->structureOutputSize >= sizeof(uint32_t) )) {
+                ret = this->secureSetMaintenanceWakeCalendar(
+                                                             (IOPMCalendarStruct *)arguments->structureInput,
+                                                             (uint32_t *)&arguments->structureOutput);
+                arguments->structureOutputSize = sizeof(uint32_t);
+            }
             break;
 
         case kPMSetUserAssertionLevels: