/*
- * Copyright (c) 2000-2010 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2018 Apple Inc. All rights reserved.
*
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
#include <sys/proc.h>
#include <mach/resource_monitors.h> // command/proc_name_t
-
__BEGIN_DECLS
#include <kern/locks.h>
#if PSYNCH
int s_listflags;
};
-#define SESSION_NULL (struct session *)0
+#define SESSION_NULL (struct session *)NULL
/*
* accessor for s_ttyp which treats it as invalid if s_ttyvp is not valid;
#define PGRP_FLAG_ITERABEGIN 8
#define PGRP_FLAG_ITERWAIT 0x10
-#define PGRP_NULL (struct pgrp *)0
+#define PGRP_NULL (struct pgrp *)NULL
struct proc;
-#define PROC_NULL (struct proc *)0
+#define PROC_NULL (struct proc *)NULL
#define PROC_UPDATE_CREDS_ONPROC(p) { \
p->p_uid = kauth_cred_getuid(p->p_ucred); \
void * task; /* corresponding task (static)*/
struct proc * p_pptr; /* Pointer to parent process.(LL) */
pid_t p_ppid; /* process's parent pid number */
+ pid_t p_original_ppid; /* process's original parent pid number, doesn't change if reparented */
pid_t p_pgrpid; /* process group id of the process (LL)*/
uid_t p_uid;
gid_t p_gid;
cpu_type_t p_cputype;
cpu_subtype_t p_cpusubtype;
+ uint8_t *syscall_filter_mask; /* syscall filter bitmask (length: nsysent bits) */
+ uint32_t p_platform;
+ uint32_t p_sdk;
+
/* End area that is copied on creation. */
/* XXXXXXXXXXXXX End of BCOPY'ed on fork (AIOLOCK)XXXXXXXXXXXXXXXX */
#define p_endcopy p_aio_total_count
#endif /* DIAGNOSTIC */
uint64_t p_dispatchqueue_offset;
uint64_t p_dispatchqueue_serialno_offset;
+ uint64_t p_dispatchqueue_label_offset;
uint64_t p_return_to_kernel_offset;
uint64_t p_mach_thread_self_offset;
#if VM_PRESSURE_EVENTS
#if CONFIG_MEMORYSTATUS
/* Fields protected by proc list lock */
TAILQ_ENTRY(proc) p_memstat_list; /* priority bucket link */
- uint32_t p_memstat_state; /* state */
+ uint32_t p_memstat_state; /* state. Also used as a wakeup channel when the memstat's LOCKED bit changes */
int32_t p_memstat_effectivepriority; /* priority after transaction state accounted for */
int32_t p_memstat_requestedpriority; /* active priority */
+ int32_t p_memstat_assertionpriority; /* assertion driven priority */
uint32_t p_memstat_dirty; /* dirty state */
uint64_t p_memstat_userdata; /* user state */
uint64_t p_memstat_idledeadline; /* time at which process became clean */
int32_t p_memstat_memlimit; /* cached memory limit, toggles between active and inactive limits */
int32_t p_memstat_memlimit_active; /* memory limit enforced when process is in active jetsam state */
int32_t p_memstat_memlimit_inactive; /* memory limit enforced when process is in inactive jetsam state */
+ int32_t p_memstat_relaunch_flags; /* flags indicating relaunch behavior for the process */
#if CONFIG_FREEZE
uint32_t p_memstat_freeze_sharedanon_pages; /* shared pages left behind after freeze */
uint32_t p_memstat_frozen_count;
pid_t p_responsible_pid; /* pid resonsible for this process */
_Atomic uint32_t p_user_faults; /* count the number of user faults generated */
+ uint32_t p_memlimit_increase; /* byte increase for memory limit for dyld SPI rdar://problem/49950264, structure packing 32-bit and 64-bit */
+
struct os_reason *p_exit_reason;
#if !CONFIG_EMBEDDED
uint64_t p_user_data; /* general-purpose storage for userland-provided data */
#endif /* !CONFIG_EMBEDDED */
+ lck_rw_t p_dirs_lock; /* keeps fd_cdir and fd_rdir stable across a lookup */
};
#define PGRPID_DEAD 0xdeaddead
#define P_LVMRSRCOWNER 0x01000000 /* can handle the resource ownership of */
#define P_LTERM_DECRYPTFAIL 0x04000000 /* process terminating due to key failure to decrypt */
#define P_LTERM_JETSAM 0x08000000 /* process is being jetsam'd */
+
#define P_JETSAM_VMPAGESHORTAGE 0x00000000 /* jetsam: lowest jetsam priority proc, killed due to vm page shortage */
#define P_JETSAM_VMTHRASHING 0x10000000 /* jetsam: lowest jetsam priority proc, killed due to vm thrashing */
#define P_JETSAM_HIWAT 0x20000000 /* jetsam: high water mark */
#define P_JETSAM_VNODE 0x50000000 /* jetsam: vnode kill */
#define P_JETSAM_FCTHRASHING 0x60000000 /* jetsam: lowest jetsam priority proc, killed due to filecache thrashing */
#define P_JETSAM_MASK 0x70000000 /* jetsam type mask */
+#define P_LNSPACE_RESOLVER 0x80000000 /* process is the namespace resolver */
/* Process control state for resource starvation */
#define P_PCTHROTTLE 1
/* p_vfs_iopolicy flags */
#define P_VFS_IOPOLICY_FORCE_HFS_CASE_SENSITIVITY 0x0001
#define P_VFS_IOPOLICY_ATIME_UPDATES 0x0002
-#define P_VFS_IOPOLICY_VALID_MASK (P_VFS_IOPOLICY_ATIME_UPDATES | P_VFS_IOPOLICY_FORCE_HFS_CASE_SENSITIVITY)
+#define P_VFS_IOPOLICY_MATERIALIZE_DATALESS_FILES 0x0004
+#define P_VFS_IOPOLICY_STATFS_NO_DATA_VOLUME 0x0008
+#define P_VFS_IOPOLICY_VALID_MASK (P_VFS_IOPOLICY_ATIME_UPDATES | P_VFS_IOPOLICY_FORCE_HFS_CASE_SENSITIVITY | P_VFS_IOPOLICY_MATERIALIZE_DATALESS_FILES | P_VFS_IOPOLICY_STATFS_NO_DATA_VOLUME)
/* process creation arguments */
#define PROC_CREATE_FORK 0 /* independent child (running) */
extern lck_grp_t * proc_mlock_grp;
extern lck_grp_t * proc_ucred_mlock_grp;
extern lck_grp_t * proc_slock_grp;
+extern lck_grp_t * proc_dirslock_grp;
extern lck_grp_attr_t * proc_lck_grp_attr;
extern lck_attr_t * proc_lck_attr;
extern void proc_fdlock_spin(struct proc *);
extern void proc_fdunlock(struct proc *);
extern void proc_fdlock_assert(proc_t p, int assertflags);
+extern void proc_dirs_lock_shared(struct proc *);
+extern void proc_dirs_unlock_shared(struct proc *);
+extern void proc_dirs_lock_exclusive(struct proc *);
+extern void proc_dirs_unlock_exclusive(struct proc *);
extern void proc_ucred_lock(struct proc *);
extern void proc_ucred_unlock(struct proc *);
__private_extern__ int proc_core_name(const char *name, uid_t uid, pid_t pid,
extern int chgproccnt(uid_t uid, int diff);
extern void pinsertchild(struct proc *parent, struct proc *child);
+extern int setsid_internal(struct proc *p);
+#ifndef __cplusplus
+extern void setlogin_internal(proc_t p, const char login[static MAXLOGNAME]);
+#endif // __cplusplus
+extern int setgroups_internal(proc_t p, u_int gidsetsize, gid_t *gidset, uid_t gmuid);
extern int enterpgrp(struct proc *p, pid_t pgid, int mksess);
extern void fixjobc(struct proc *p, struct pgrp *pgrp, int entering);
extern int inferior(struct proc *p);
*/
#define PGRP_DROPREF (1)
-extern int pgrp_iterate(struct pgrp *pgrp, unsigned int flags, proc_iterate_fn_t callout, void *arg, proc_iterate_fn_t filterfn, void *filterarg);
+extern void pgrp_iterate(struct pgrp *pgrp, unsigned int flags, proc_iterate_fn_t callout, void *arg, proc_iterate_fn_t filterfn, void *filterarg);
/*
* proc_iterate walks the `allproc` and/or `zombproc` lists, calling `filterfn`
#define PROC_ZOMBPROCLIST (1U << 1) /* walk the zombie list */
#define PROC_NOWAITTRANS (1U << 2) /* do not wait for transitions (checkdirs only) */
-extern int proc_iterate(unsigned int flags, proc_iterate_fn_t callout, void *arg, proc_iterate_fn_t filterfn, void *filterarg);
+extern void proc_iterate(unsigned int flags, proc_iterate_fn_t callout, void *arg, proc_iterate_fn_t filterfn, void *filterarg);
/*
* proc_childrenwalk walks the children of process `p`, calling `callout` for
* `PCHILDREN_FOREACH` might also be used under the `proc_list_lock` to achieve
* a similar effect.
*/
-extern int proc_childrenwalk(proc_t p, proc_iterate_fn_t callout, void *arg);
+extern void proc_childrenwalk(proc_t p, proc_iterate_fn_t callout, void *arg);
/*
* proc_rebootscan should only be used by kern_shutdown.c