Lines Matching refs:semakptr
91 struct semid_kernel *semakptr);
546 semvalid(int semid, struct prison *rpr, struct semid_kernel *semakptr) in semvalid() argument
549 return ((semakptr->u.sem_perm.mode & SEM_ALLOC) == 0 || in semvalid()
550 semakptr->u.sem_perm.seq != IPCID_TO_SEQ(semid) || in semvalid()
551 sem_prison_cansee(rpr, semakptr) ? EINVAL : 0); in semvalid()
557 struct semid_kernel *semakptr; in sem_remove() local
562 semakptr = &sema[semidx]; in sem_remove()
563 semakptr->u.sem_perm.cuid = cred ? cred->cr_uid : 0; in sem_remove()
564 semakptr->u.sem_perm.uid = cred ? cred->cr_uid : 0; in sem_remove()
565 semakptr->u.sem_perm.mode = 0; in sem_remove()
566 racct_sub_cred(semakptr->cred, RACCT_NSEM, semakptr->u.sem_nsems); in sem_remove()
567 crfree(semakptr->cred); in sem_remove()
568 semakptr->cred = NULL; in sem_remove()
573 mac_sysvsem_cleanup(semakptr); in sem_remove()
575 wakeup(semakptr); in sem_remove()
578 sema[i].u.__sem_base > semakptr->u.__sem_base) in sem_remove()
581 for (i = semakptr->u.__sem_base - sem; i < semtot; i++) in sem_remove()
582 sem[i] = sem[i + semakptr->u.sem_nsems]; in sem_remove()
585 sema[i].u.__sem_base > semakptr->u.__sem_base) { in sem_remove()
586 sema[i].u.__sem_base -= semakptr->u.sem_nsems; in sem_remove()
590 semtot -= semakptr->u.sem_nsems; in sem_remove()
606 sem_prison_cansee(struct prison *rpr, struct semid_kernel *semakptr) in sem_prison_cansee() argument
609 if (semakptr->cred == NULL || in sem_prison_cansee()
610 !(rpr == semakptr->cred->cr_prison || in sem_prison_cansee()
611 prison_ischild(rpr, semakptr->cred->cr_prison))) in sem_prison_cansee()
694 struct semid_kernel *semakptr; in kern_semctl() local
719 semakptr = &sema[semid]; in kern_semctl()
722 if ((semakptr->u.sem_perm.mode & SEM_ALLOC) == 0) { in kern_semctl()
726 if ((error = sem_prison_cansee(rpr, semakptr))) in kern_semctl()
728 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
731 error = mac_sysvsem_check_semctl(cred, semakptr, cmd); in kern_semctl()
735 bcopy(&semakptr->u, arg->buf, sizeof(struct semid_ds)); in kern_semctl()
736 if (cred->cr_prison != semakptr->cred->cr_prison) in kern_semctl()
738 *rval = IXSEQ_TO_IPCID(semid, semakptr->u.sem_perm); in kern_semctl()
747 semakptr = &sema[semidx]; in kern_semctl()
754 error = mac_sysvsem_check_semctl(cred, semakptr, cmd); in kern_semctl()
764 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
766 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_M))) in kern_semctl()
773 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
775 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_M))) in kern_semctl()
778 semakptr->u.sem_perm.uid = sbuf->sem_perm.uid; in kern_semctl()
779 semakptr->u.sem_perm.gid = sbuf->sem_perm.gid; in kern_semctl()
780 semakptr->u.sem_perm.mode = (semakptr->u.sem_perm.mode & in kern_semctl()
782 semakptr->u.sem_ctime = time_second; in kern_semctl()
786 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
788 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
790 bcopy(&semakptr->u, arg->buf, sizeof(struct semid_ds)); in kern_semctl()
791 if (cred->cr_prison != semakptr->cred->cr_prison) in kern_semctl()
796 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
798 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
800 if (semnum < 0 || semnum >= semakptr->u.sem_nsems) { in kern_semctl()
804 *rval = semakptr->u.__sem_base[semnum].semncnt; in kern_semctl()
808 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
810 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
812 if (semnum < 0 || semnum >= semakptr->u.sem_nsems) { in kern_semctl()
816 *rval = semakptr->u.__sem_base[semnum].sempid; in kern_semctl()
820 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
822 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
824 if (semnum < 0 || semnum >= semakptr->u.sem_nsems) { in kern_semctl()
828 *rval = semakptr->u.__sem_base[semnum].semval; in kern_semctl()
852 count = semakptr->u.sem_nsems; in kern_semctl()
856 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
858 KASSERT(count == semakptr->u.sem_nsems, ("nsems changed")); in kern_semctl()
859 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
861 for (i = 0; i < semakptr->u.sem_nsems; i++) in kern_semctl()
862 array[i] = semakptr->u.__sem_base[i].semval; in kern_semctl()
869 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
871 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
873 if (semnum < 0 || semnum >= semakptr->u.sem_nsems) { in kern_semctl()
877 *rval = semakptr->u.__sem_base[semnum].semzcnt; in kern_semctl()
881 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
883 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_W))) in kern_semctl()
885 if (semnum < 0 || semnum >= semakptr->u.sem_nsems) { in kern_semctl()
893 semakptr->u.__sem_base[semnum].semval = arg->val; in kern_semctl()
897 wakeup(semakptr); in kern_semctl()
905 count = semakptr->u.sem_nsems; in kern_semctl()
912 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
914 KASSERT(count == semakptr->u.sem_nsems, ("nsems changed")); in kern_semctl()
915 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_W))) in kern_semctl()
917 for (i = 0; i < semakptr->u.sem_nsems; i++) { in kern_semctl()
923 semakptr->u.__sem_base[i].semval = usval; in kern_semctl()
928 wakeup(semakptr); in kern_semctl()
1093 struct semid_kernel *semakptr; in sys_semop() local
1149 semakptr = &sema[semid]; in sys_semop()
1152 if ((semakptr->u.sem_perm.mode & SEM_ALLOC) == 0) { in sys_semop()
1156 seq = semakptr->u.sem_perm.seq; in sys_semop()
1161 if ((error = sem_prison_cansee(rpr, semakptr)) != 0) in sys_semop()
1172 if (sopptr->sem_num >= semakptr->u.sem_nsems) { in sys_semop()
1181 if ((error = ipcperm(td, &semakptr->u.sem_perm, j))) { in sys_semop()
1186 error = mac_sysvsem_check_semop(td->td_ucred, semakptr, j); in sys_semop()
1206 semptr = &semakptr->u.__sem_base[sopptr->sem_num]; in sys_semop()
1211 semakptr, semakptr->u.__sem_base, semptr, in sys_semop()
1253 semakptr->u.__sem_base[sops[j].sem_num].semval -= in sys_semop()
1275 error = msleep(semakptr, sema_mtxp, (PZERO - 4) | PCATCH, in sys_semop()
1283 seq = semakptr->u.sem_perm.seq; in sys_semop()
1284 if ((semakptr->u.sem_perm.mode & SEM_ALLOC) == 0 || in sys_semop()
1295 semptr = &semakptr->u.__sem_base[sopptr->sem_num]; in sys_semop()
1364 semakptr->u.__sem_base[sops[j].sem_num].semval -= in sys_semop()
1377 semptr = &semakptr->u.__sem_base[sopptr->sem_num]; in sys_semop()
1380 semakptr->u.sem_otime = time_second; in sys_semop()
1388 wakeup(semakptr); in sys_semop()
1408 struct semid_kernel *semakptr; in semexit_myhook() local
1443 semakptr = &sema[semid]; in semexit_myhook()
1447 if ((semakptr->u.sem_perm.mode & SEM_ALLOC) == 0 || in semexit_myhook()
1448 (semakptr->u.sem_perm.seq != seq)) { in semexit_myhook()
1452 if (semnum >= semakptr->u.sem_nsems) in semexit_myhook()
1460 semakptr->u.__sem_base[semnum].semval)); in semexit_myhook()
1462 if (adjval < 0 && semakptr->u.__sem_base[semnum].semval < in semexit_myhook()
1464 semakptr->u.__sem_base[semnum].semval = 0; in semexit_myhook()
1466 semakptr->u.__sem_base[semnum].semval += adjval; in semexit_myhook()
1468 wakeup(semakptr); in semexit_myhook()