Loading...
--- xnu/xnu-10063.141.1/iokit/Kernel/RootDomainUserClient.cpp
+++ xnu/xnu-12377.61.12/iokit/Kernel/RootDomainUserClient.cpp
@@ -224,6 +224,46 @@
}
IOReturn
+RootDomainUserClient::secureAttemptIdleSleepAbort(
+ uint32_t *outReverted)
+{
+ int admin_priv = 0;
+ IOReturn ret;
+
+ ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator);
+ admin_priv = (kIOReturnSuccess == ret);
+
+ if (admin_priv && fOwner) {
+ *outReverted = (uint32_t) fOwner->attemptIdleSleepAbort();
+ } else {
+ ret = kIOReturnNotPrivileged;
+ }
+ return ret;
+}
+
+IOReturn
+RootDomainUserClient::secureSetLockdownModeHibernation(
+ uint32_t status)
+{
+#if HIBERNATION
+ int admin_priv = 0;
+ IOReturn ret;
+
+ ret = clientHasPrivilege(fOwningTask, kIOClientPrivilegeAdministrator);
+ admin_priv = (kIOReturnSuccess == ret);
+
+ if (admin_priv && fOwner) {
+ fOwner->setLockdownModeHibernation(status);
+ } else {
+ ret = kIOReturnNotPrivileged;
+ }
+ return kIOReturnSuccess;
+#else
+ return kIOReturnError;
+#endif
+}
+
+IOReturn
RootDomainUserClient::clientClose( void )
{
terminate();
@@ -382,6 +422,24 @@
.checkEntitlement = NULL,
},
[kPMSetDisplayPowerOn] = {
+ .function = &RootDomainUserClient::externalMethodDispatched,
+ .checkScalarInputCount = 1,
+ .checkStructureInputSize = 0,
+ .checkScalarOutputCount = 0,
+ .checkStructureOutputSize = 0,
+ .allowAsync = false,
+ .checkEntitlement = NULL,
+ },
+ [kPMRequestIdleSleepRevert] = {
+ .function = &RootDomainUserClient::externalMethodDispatched,
+ .checkScalarInputCount = 0,
+ .checkStructureInputSize = 0,
+ .checkScalarOutputCount = 1,
+ .checkStructureOutputSize = 0,
+ .allowAsync = false,
+ .checkEntitlement = NULL,
+ },
+ [kPMSetLDMHibernationDisable] = {
.function = &RootDomainUserClient::externalMethodDispatched,
.checkScalarInputCount = 1,
.checkStructureInputSize = 0,
@@ -484,7 +542,6 @@
}
break;
-
case kPMSleepWakeDebugTrig:
ret = clientHasPrivilege(me->fOwningTask, kIOClientPrivilegeAdministrator);
if (ret == kIOReturnSuccess) {
@@ -499,6 +556,16 @@
me->fOwner->setDisplayPowerOn((uint32_t)arguments->scalarInput[0]);
}
break;
+
+ case kPMRequestIdleSleepRevert:
+ ret = me->secureAttemptIdleSleepAbort(
+ (uint32_t *) &arguments->scalarOutput[0]);
+ break;
+
+ case kPMSetLDMHibernationDisable:
+ ret = me->secureSetLockdownModeHibernation((uint32_t)arguments->scalarInput[0]);
+ break;
+
default:
// bad selector