• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.5.8/xnu-1228.15.4/bsd/kern/

Lines Matching refs:pinfo

142 	struct pseminfo *pinfo;
164 static int psem_access(struct pseminfo *pinfo, int mode, kauth_cred_t cred);
167 static int psem_delete(struct pseminfo * pinfo);
358 struct pseminfo *pinfo;
377 pinfo = PSEMINFO_NULL;
419 error = psem_cache_search(&pinfo, &nd, &pcache);
445 if (pinfo->psem_flags & PSEM_INDELETE) {
448 AUDIT_ARG(posix_ipc_perm, pinfo->psem_uid,
449 pinfo->psem_gid, pinfo->psem_mode);
466 MALLOC(pinfo, struct pseminfo *, sizeof(struct pseminfo), M_SHM, M_WAITOK|M_ZERO);
467 if (pinfo == NULL) {
472 mac_posixsem_label_init(pinfo);
477 pinfo->psem_flags = PSEM_DEFINED | PSEM_INCREATE;
478 pinfo->psem_usecount = 1;
479 pinfo->psem_mode = cmode;
480 pinfo->psem_uid = kauth_cred_getuid(kauth_cred_get());
481 pinfo->psem_gid = kauth_cred_get()->cr_gid;
482 bcopy(pnbuf, &pinfo->psem_name[0], PSEMNAMLEN);
483 pinfo->psem_name[PSEMNAMLEN]= 0;
485 kret = semaphore_create(kernel_task, &pinfo->psem_semobject,
490 pinfo->psem_flags &= ~PSEM_DEFINED;
491 pinfo->psem_flags |= PSEM_ALLOCATED;
492 pinfo->sem_proc = p;
499 mac_posixsem_label_associate(kauth_cred_get(), pinfo, nameptr);
508 if( pinfo->psem_flags & PSEM_INDELETE) {
513 AUDIT_ARG(posix_ipc_perm, pinfo->psem_uid,
514 pinfo->psem_gid, pinfo->psem_mode);
516 error = mac_posixsem_check_open(kauth_cred_get(), pinfo);
522 if ( (error = psem_access(pinfo, fmode, kauth_cred_get())) ) {
548 if ( (error = psem_cache_add(pinfo, &nd, pcp)) ) {
554 pinfo->psem_flags &= ~PSEM_INCREATE;
555 pinfo->psem_usecount++;
556 pnode->pinfo = pinfo;
589 mac_posixsem_label_destroy(pinfo);
591 FREE(pinfo, M_SHM);
603 psem_access(struct pseminfo *pinfo, int mode, kauth_cred_t cred)
615 if (kauth_cred_getuid(cred) == pinfo->psem_uid) {
620 return ((pinfo->psem_mode & mask) == mask ? 0 : EACCES);
624 if (kauth_cred_ismember_gid(cred, pinfo->psem_gid, &is_member) == 0 && is_member) {
629 return ((pinfo->psem_mode & mask) == mask ? 0 : EACCES);
637 return ((pinfo->psem_mode & mask) == mask ? 0 : EACCES);
646 struct pseminfo *pinfo;
654 pinfo = PSEMINFO_NULL;
697 error = psem_cache_search(&pinfo, &nd, &pcache);
712 error = mac_posixsem_check_unlink(kauth_cred_get(), pinfo, nameptr);
718 if ( (error = psem_access(pinfo, pinfo->psem_mode, kauth_cred_get())) ) {
723 if ((pinfo->psem_flags & (PSEM_DEFINED | PSEM_ALLOCATED))==0) {
729 if ( (pinfo->psem_flags & PSEM_INDELETE) ) {
735 AUDIT_ARG(posix_ipc_perm, pinfo->psem_uid, pinfo->psem_gid,
736 pinfo->psem_mode);
738 pinfo->psem_flags |= PSEM_INDELETE;
739 pinfo->psem_usecount--;
741 if (!pinfo->psem_usecount) {
742 psem_delete(pinfo);
743 FREE(pinfo,M_SHM);
745 pinfo->psem_flags |= PSEM_REMOVED;
791 struct pseminfo * pinfo;
804 if ((pinfo = pnode->pinfo) == PSEMINFO_NULL) {
809 if ((pinfo->psem_flags & (PSEM_DEFINED | PSEM_ALLOCATED))
816 error = mac_posixsem_check_wait(kauth_cred_get(), pinfo);
823 kret = semaphore_wait(pinfo->psem_semobject);
851 struct pseminfo * pinfo;
865 if ((pinfo = pnode->pinfo) == PSEMINFO_NULL) {
870 if ((pinfo->psem_flags & (PSEM_DEFINED | PSEM_ALLOCATED))
877 error = mac_posixsem_check_wait(kauth_cred_get(), pinfo);
887 kret = semaphore_timedwait(pinfo->psem_semobject, MACH_TIMESPEC_ZERO);
916 struct pseminfo * pinfo;
929 if ((pinfo = pnode->pinfo) == PSEMINFO_NULL) {
934 if ((pinfo->psem_flags & (PSEM_DEFINED | PSEM_ALLOCATED))
941 error = mac_posixsem_check_post(kauth_cred_get(), pinfo);
948 kret = semaphore_signal(pinfo->psem_semobject);
992 struct pseminfo *pinfo;
995 if ((pinfo = pnode->pinfo) == PSEMINFO_NULL){
1000 if ((pinfo->psem_flags & PSEM_ALLOCATED) != PSEM_ALLOCATED) {
1005 if(!pinfo->psem_usecount) {
1009 pinfo->psem_usecount--;
1011 if ((pinfo->psem_flags & PSEM_REMOVED) && !pinfo->psem_usecount) {
1014 error = psem_delete(pinfo);
1015 FREE(pinfo,M_SHM);
1039 psem_delete(struct pseminfo * pinfo)
1043 kret = semaphore_destroy(kernel_task, pinfo->psem_semobject);
1045 mac_posixsem_label_destroy(pinfo);
1100 struct pseminfo *pinfo;
1104 if ((pinfo = pnode->pinfo) == PSEMINFO_NULL){
1110 if ((pinfo->psem_flags & PSEM_ALLOCATED) != PSEM_ALLOCATED) {
1119 sb->vst_mode = pinfo->psem_mode;
1120 sb->vst_uid = pinfo->psem_uid;
1121 sb->vst_gid = pinfo->psem_gid;
1122 sb->vst_size = pinfo->psem_usecount;
1123 bcopy(&pinfo->psem_name[0], &info->psem_name[0], PSEMNAMLEN+1);
1139 psem = pnode->pinfo;