Loading...
--- xnu/xnu-10063.141.1/iokit/Kernel/RootDomainUserClient.cpp
+++ xnu/xnu-11215.41.3/iokit/Kernel/RootDomainUserClient.cpp
@@ -224,6 +224,24 @@
}
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::clientClose( void )
{
terminate();
@@ -386,6 +404,15 @@
.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,
@@ -484,7 +511,6 @@
}
break;
-
case kPMSleepWakeDebugTrig:
ret = clientHasPrivilege(me->fOwningTask, kIOClientPrivilegeAdministrator);
if (ret == kIOReturnSuccess) {
@@ -499,6 +525,12 @@
me->fOwner->setDisplayPowerOn((uint32_t)arguments->scalarInput[0]);
}
break;
+
+ case kPMRequestIdleSleepRevert:
+ ret = me->secureAttemptIdleSleepAbort(
+ (uint32_t *) &arguments->scalarOutput[0]);
+ break;
+
default:
// bad selector