]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/security/audit/audit_session.c
xnu-3789.41.3.tar.gz
[apple/xnu.git] / bsd / security / audit / audit_session.c
index 639920f5e4b412167d0232c98d65008d1eb9332f..7b6236eda695193280230a9eb169edbf474aa139 100644 (file)
@@ -386,6 +386,8 @@ SYSCTL_QUAD(_audit_session, OID_AUTO, member_clear_sflags_mask, CTLFLAG_RW | CTL
     &audit_session_member_clear_sflags_mask,
     "Audit session flags clearable by a session member");
 
+extern int set_security_token_task_internal(proc_t p, void *task);
+
 #define        AUDIT_SESSION_DEBUG     0
 #if    AUDIT_SESSION_DEBUG
 /*
@@ -1376,7 +1378,7 @@ done:
 }
 
 static int
-audit_session_join_internal(proc_t p, ipc_port_t port, au_asid_t *new_asid)
+audit_session_join_internal(proc_t p, task_t task, ipc_port_t port, au_asid_t *new_asid)
 {
        auditinfo_addr_t *new_aia_p, *old_aia_p;
        kauth_cred_t my_cred = NULL;
@@ -1424,7 +1426,7 @@ audit_session_join_internal(proc_t p, ipc_port_t port, au_asid_t *new_asid)
                proc_ucred_unlock(p);
 
                /* Propagate the change from the process to the Mach task. */
-               set_security_token(p);
+               set_security_token_task_internal(p, task);
 
                /* Decrement the process count of the former session. */
                audit_dec_procount(AU_SENTRY_PTR(old_aia_p));
@@ -1450,11 +1452,11 @@ done:
  *             ESRCH           Invalid calling process/cred.
  */
 int
-audit_session_spawnjoin(proc_t p, ipc_port_t port)
+audit_session_spawnjoin(proc_t p, task_t task, ipc_port_t port)
 {
        au_asid_t new_asid;
        
-       return (audit_session_join_internal(p, port, &new_asid));
+       return (audit_session_join_internal(p, task, port, &new_asid));
 }
 
 /*
@@ -1488,7 +1490,7 @@ audit_session_join(proc_t p, struct audit_session_join_args *uap,
                *ret_asid = AU_DEFAUDITSID;
                err = EINVAL;
        } else
-               err = audit_session_join_internal(p, port, ret_asid);
+               err = audit_session_join_internal(p, p->task, port, ret_asid);
 
        return (err);
 }