Skip to content

Commit cf555cd

Browse files
trulyspinachopcm
authored andcommitted
ensure PcmMsrClient can only opened by root
1 parent dd02c99 commit cf555cd

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

src/MacMSRDriver/PcmMsr/PcmMsrClient.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,23 @@ IOReturn PcmMsrClientClassName::externalMethod(uint32_t selector, IOExternalMeth
4141
return super::externalMethod(selector, args, dispatch, target, reference);
4242
}
4343

44+
bool PcmMsrClientClassName::initWithTask(task_t owningTask, void *securityToken, UInt32 type, OSDictionary *properties)
45+
{
46+
if(!IOUserClient::initWithTask(owningTask, securityToken, type, properties)) {
47+
return false;
48+
}
49+
50+
sSecurityToken = securityToken;
51+
return true;
52+
}
53+
4454
bool PcmMsrClientClassName::start(IOService* provider)
4555
{
4656
bool result = false;
47-
57+
58+
if(clientHasPrivilege(sSecurityToken, kIOClientPrivilegeAdministrator) != kIOReturnSuccess)
59+
return false;
60+
4861
fProvider = OSDynamicCast(PcmMsrDriverClassName, provider);
4962

5063
if (fProvider != NULL) {

src/MacMSRDriver/PcmMsr/PcmMsrClient.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@ class PcmMsrClientClassName : public IOUserClient
1414

1515
protected:
1616
PcmMsrDriverClassName* fProvider;
17+
void* sSecurityToken;
1718
static const IOExternalMethodDispatch sMethods[kNumberOfMethods];
1819

1920
public:
21+
virtual bool initWithTask(task_t owningTask, void *securityToken, UInt32 type, OSDictionary *properties) override;
2022
virtual bool start(IOService *provider) override;
21-
23+
2224
virtual IOReturn clientClose(void) override;
2325

2426
virtual bool didTerminate(IOService* provider, IOOptionBits opts, bool* defer) override;

0 commit comments

Comments
 (0)