- session0.s_leader = p;
-
- p->task = kernel_task;
-
- p->p_stat = SRUN;
- p->p_flag = P_INMEM|P_SYSTEM;
- p->p_nice = NZERO;
- p->p_pptr = p;
- lockinit(&p->signal_lock, PVM, "signal", 0, 0);
- p->sigwait = FALSE;
- p->sigwait_thread = THREAD_NULL;
- p->exit_thread = THREAD_NULL;
-
- /* Create credentials. */
- lockinit(&cred0.pc_lock, PLOCK, "proc0 cred", 0, 0);
- cred0.p_refcnt = 1;
- p->p_cred = &cred0;
- p->p_ucred = crget();
- p->p_ucred->cr_ngroups = 1; /* group 0 */
+ session0.s_leader = kernproc;
+ session0.s_listflags = 0;
+ lck_mtx_init(&session0.s_mlock, &proc_mlock_grp, &proc_lck_attr);
+ LIST_INSERT_HEAD(SESSHASH(0), &session0, s_hash);
+ proc_list_unlock();
+
+#if CONFIG_PERSONAS
+ kernproc->p_persona = NULL;
+#endif
+
+ kernproc->task = kernel_task;
+
+ kernproc->p_stat = SRUN;
+ kernproc->p_flag = P_SYSTEM;
+ kernproc->p_lflag = 0;
+ kernproc->p_ladvflag = 0;
+
+#if defined(__LP64__)
+ kernproc->p_flag |= P_LP64;
+#endif
+
+#if DEVELOPMENT || DEBUG
+ if (bootarg_disable_aslr) {
+ kernproc->p_flag |= P_DISABLE_ASLR;
+ }
+#endif
+
+ kernproc->p_nice = NZERO;
+ kernproc->p_pptr = kernproc;
+
+ TAILQ_INIT(&kernproc->p_uthlist);
+ TAILQ_INSERT_TAIL(&kernproc->p_uthlist, ut, uu_list);
+
+ kernproc->sigwait = FALSE;
+ kernproc->sigwait_thread = THREAD_NULL;
+ kernproc->exit_thread = THREAD_NULL;
+ kernproc->p_csflags = CS_VALID;
+
+ /*
+ * Create credential. This also Initializes the audit information.
+ */
+ bsd_init_kprintf("calling bzero\n");
+ bzero(&temp_cred, sizeof(temp_cred));
+ bzero(&temp_pcred, sizeof(temp_pcred));
+ temp_pcred.cr_ngroups = 1;
+ /* kern_proc, shouldn't call up to DS for group membership */
+ temp_pcred.cr_flags = CRF_NOMEMBERD;
+ temp_cred.cr_audit.as_aia_p = audit_default_aia_p;
+
+ bsd_init_kprintf("calling kauth_cred_create\n");
+ /*
+ * We have to label the temp cred before we create from it to
+ * properly set cr_ngroups, or the create will fail.
+ */
+ posix_cred_label(&temp_cred, &temp_pcred);
+ kernproc->p_ucred = kauth_cred_create(&temp_cred);
+
+ /* update cred on proc */
+ PROC_UPDATE_CREDS_ONPROC(kernproc);
+
+ /* give the (already exisiting) initial thread a reference on it */
+ bsd_init_kprintf("calling kauth_cred_ref\n");
+ kauth_cred_ref(kernproc->p_ucred);
+ ut->uu_context.vc_ucred = kernproc->p_ucred;
+ ut->uu_context.vc_thread = current_thread();
+
+ vfs_set_context_kernel(&ut->uu_context);
+
+ TAILQ_INIT(&kernproc->p_aio_activeq);
+ TAILQ_INIT(&kernproc->p_aio_doneq);
+ kernproc->p_aio_total_count = 0;
+
+#if CONFIG_MACF
+ mac_cred_label_associate_kernel(kernproc->p_ucred);
+#endif