#define f_flag f_fglob->fg_flag
-#define f_type f_fglob->fg_type
+#define f_type f_fglob->fg_ops->fo_type
#define f_msgcount f_fglob->fg_msgcount
#define f_cred f_fglob->fg_cred
#define f_ops f_fglob->fg_ops
gid_t psem_gid;
char psem_name[PSEMNAMLEN + 1]; /* segment name */
semaphore_t psem_semobject;
- proc_t sem_proc;
struct label * psem_label;
+ pid_t psem_creator_pid;
+ uint64_t psem_creator_uniqueid;
};
#define PSEMINFO_NULL (struct pseminfo *)0
static int psem_kqfilter (struct fileproc *fp, struct knote *kn, vfs_context_t ctx);
-struct fileops psemops =
- { psem_read, psem_write, psem_ioctl, psem_select, psem_closefile, psem_kqfilter, NULL };
-
+static const struct fileops psemops = {
+ DTYPE_PSXSEM,
+ psem_read,
+ psem_write,
+ psem_ioctl,
+ psem_select,
+ psem_closefile,
+ psem_kqfilter,
+ NULL
+};
static lck_grp_t *psx_sem_subsys_lck_grp;
static lck_grp_attr_t *psx_sem_subsys_lck_grp_attr;
pinfo->psem_name[PSEMNAMLEN]= 0;
pinfo->psem_flags &= ~PSEM_DEFINED;
pinfo->psem_flags |= PSEM_ALLOCATED;
- pinfo->sem_proc = p;
+ pinfo->psem_creator_pid = p->p_pid;
+ pinfo->psem_creator_uniqueid = p->p_uniqueid;
#if CONFIG_MACF
error = mac_posixsem_check_create(kauth_cred_get(), nameptr);
proc_fdlock(p);
fp->f_flag = fmode & FMASK;
- fp->f_type = DTYPE_PSXSEM;
fp->f_ops = &psemops;
fp->f_data = (caddr_t)new_pnode;
procfdtbl_releasefd(p, indx, NULL);
fileproc_drain(p, fp);
fdrelse(p, fd);
error = closef_locked(fp, fp->f_fglob, p);
- FREE_ZONE(fp, sizeof *fp, M_FILEPROC);
+ fileproc_free(fp);
proc_fdunlock(p);
return(error);
}