X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/dbe775057b53a81d9983d810772462c3233fccd3..refs/heads/master:/securityd/src/process.cpp diff --git a/securityd/src/process.cpp b/securityd/src/process.cpp index b3193798..496bff88 100644 --- a/securityd/src/process.cpp +++ b/securityd/src/process.cpp @@ -43,7 +43,7 @@ Process::Process(TaskPort taskPort, const ClientSetupInfo *info, const CommonCri : mTaskPort(taskPort), mByteFlipped(false), mPid(audit.pid()), mUid(audit.euid()), mGid(audit.egid()), mAudit(audit) { StLock _(*this); - + xpc_transaction_begin(); // set parent session parent(Session::find(audit.sessionId(), true)); @@ -69,12 +69,15 @@ Process::Process(TaskPort taskPort, const ClientSetupInfo *info, const CommonCri CssmError::throwMe(CSSMERR_CSSM_ADDIN_AUTHENTICATE_FAILED); } + // This is a "retain", matched by the deallocate call in ~Process + mTaskPort.modRefs(MACH_PORT_RIGHT_SEND, 1); + // NB: ServerChild::find() should only be used to determine // *existence*. Don't use the returned Child object for anything else, // as it is not protected against its underlying process's destruction. if (this->pid() == getpid() // called ourselves (through some API). Do NOT record this as a "dirty" transaction || ServerChild::find(this->pid())) // securityd's child; do not mark this txn dirty - VProc::Transaction::deactivate(); + xpc_transaction_end(); secinfo("SecServer", "%p client new: pid:%d session:%d %s taskPort:%d uid:%d gid:%d", this, this->pid(), this->session().sessionId(), (char *)codePath(this->processCode()).c_str(), taskPort.port(), mUid, mGid); @@ -103,7 +106,6 @@ void Process::reset(TaskPort taskPort, const ClientSetupInfo *info, const Common secnotice("SecServer", "%p Client reset amnesia", this); } else { secnotice("SecServer", "%p Client reset full", this); - CodeSigningHost::reset(); } } @@ -142,6 +144,7 @@ Process::~Process() if (mTaskPort) { mTaskPort.deallocate(); } + xpc_transaction_end(); } void Process::kill() @@ -209,7 +212,6 @@ void Process::dumpNode() Debug::dump(" FLIPPED"); Debug::dump(" task=%d pid=%d uid/gid=%d/%d", mTaskPort.port(), mPid, mUid, mGid); - CodeSigningHost::dump(); ClientIdentification::dump(); }