Lines Matching refs:semakptr

89     struct semid_kernel *semakptr);
543 semvalid(int semid, struct prison *rpr, struct semid_kernel *semakptr) in semvalid() argument
546 return ((semakptr->u.sem_perm.mode & SEM_ALLOC) == 0 || in semvalid()
547 semakptr->u.sem_perm.seq != IPCID_TO_SEQ(semid) || in semvalid()
548 sem_prison_cansee(rpr, semakptr) ? EINVAL : 0); in semvalid()
554 struct semid_kernel *semakptr; in sem_remove() local
560 semakptr = &sema[semidx]; in sem_remove()
561 KASSERT(semakptr->u.__sem_base - sem + semakptr->u.sem_nsems <= semtot, in sem_remove()
563 semidx, semakptr->u.__sem_base, sem, semakptr->u.sem_nsems, in sem_remove()
566 semakptr->u.sem_perm.cuid = cred ? cred->cr_uid : 0; in sem_remove()
567 semakptr->u.sem_perm.uid = cred ? cred->cr_uid : 0; in sem_remove()
568 semakptr->u.sem_perm.mode = 0; in sem_remove()
569 racct_sub_cred(semakptr->cred, RACCT_NSEM, semakptr->u.sem_nsems); in sem_remove()
570 crfree(semakptr->cred); in sem_remove()
571 semakptr->cred = NULL; in sem_remove()
576 mac_sysvsem_cleanup(semakptr); in sem_remove()
578 wakeup(semakptr); in sem_remove()
581 sema[i].u.__sem_base > semakptr->u.__sem_base) in sem_remove()
584 for (i = semakptr->u.__sem_base - sem + semakptr->u.sem_nsems; in sem_remove()
586 sem[i - semakptr->u.sem_nsems] = sem[i]; in sem_remove()
589 sema[i].u.__sem_base > semakptr->u.__sem_base) { in sem_remove()
590 sema[i].u.__sem_base -= semakptr->u.sem_nsems; in sem_remove()
594 semtot -= semakptr->u.sem_nsems; in sem_remove()
610 sem_prison_cansee(struct prison *rpr, struct semid_kernel *semakptr) in sem_prison_cansee() argument
613 if (semakptr->cred == NULL || in sem_prison_cansee()
614 !(rpr == semakptr->cred->cr_prison || in sem_prison_cansee()
615 prison_ischild(rpr, semakptr->cred->cr_prison))) in sem_prison_cansee()
698 struct semid_kernel *semakptr; in kern_semctl() local
723 semakptr = &sema[semid]; in kern_semctl()
726 if ((semakptr->u.sem_perm.mode & SEM_ALLOC) == 0) { in kern_semctl()
730 if ((error = sem_prison_cansee(rpr, semakptr))) in kern_semctl()
732 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
735 error = mac_sysvsem_check_semctl(cred, semakptr, cmd); in kern_semctl()
739 bcopy(&semakptr->u, arg->buf, sizeof(struct semid_ds)); in kern_semctl()
740 if (cred->cr_prison != semakptr->cred->cr_prison) in kern_semctl()
742 *rval = IXSEQ_TO_IPCID(semid, semakptr->u.sem_perm); in kern_semctl()
751 semakptr = &sema[semidx]; in kern_semctl()
758 error = mac_sysvsem_check_semctl(cred, semakptr, cmd); in kern_semctl()
768 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
770 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_M))) in kern_semctl()
777 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
779 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_M))) in kern_semctl()
782 semakptr->u.sem_perm.uid = sbuf->sem_perm.uid; in kern_semctl()
783 semakptr->u.sem_perm.gid = sbuf->sem_perm.gid; in kern_semctl()
784 semakptr->u.sem_perm.mode = (semakptr->u.sem_perm.mode & in kern_semctl()
786 semakptr->u.sem_ctime = time_second; in kern_semctl()
790 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
792 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
794 bcopy(&semakptr->u, arg->buf, sizeof(struct semid_ds)); in kern_semctl()
795 if (cred->cr_prison != semakptr->cred->cr_prison) in kern_semctl()
807 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
809 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
811 if (semnum < 0 || semnum >= semakptr->u.sem_nsems) { in kern_semctl()
815 *rval = semakptr->u.__sem_base[semnum].semncnt; in kern_semctl()
819 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
821 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
823 if (semnum < 0 || semnum >= semakptr->u.sem_nsems) { in kern_semctl()
827 *rval = semakptr->u.__sem_base[semnum].sempid; in kern_semctl()
831 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
833 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
835 if (semnum < 0 || semnum >= semakptr->u.sem_nsems) { in kern_semctl()
839 *rval = semakptr->u.__sem_base[semnum].semval; in kern_semctl()
863 count = semakptr->u.sem_nsems; in kern_semctl()
867 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
869 KASSERT(count == semakptr->u.sem_nsems, ("nsems changed")); in kern_semctl()
870 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
872 for (i = 0; i < semakptr->u.sem_nsems; i++) in kern_semctl()
873 array[i] = semakptr->u.__sem_base[i].semval; in kern_semctl()
880 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
882 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
884 if (semnum < 0 || semnum >= semakptr->u.sem_nsems) { in kern_semctl()
888 *rval = semakptr->u.__sem_base[semnum].semzcnt; in kern_semctl()
892 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
894 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_W))) in kern_semctl()
896 if (semnum < 0 || semnum >= semakptr->u.sem_nsems) { in kern_semctl()
904 semakptr->u.__sem_base[semnum].semval = arg->val; in kern_semctl()
908 wakeup(semakptr); in kern_semctl()
916 count = semakptr->u.sem_nsems; in kern_semctl()
923 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
925 KASSERT(count == semakptr->u.sem_nsems, ("nsems changed")); in kern_semctl()
926 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_W))) in kern_semctl()
928 for (i = 0; i < semakptr->u.sem_nsems; i++) { in kern_semctl()
934 semakptr->u.__sem_base[i].semval = usval; in kern_semctl()
939 wakeup(semakptr); in kern_semctl()
1111 struct semid_kernel *semakptr; in kern_semop() local
1185 semakptr = &sema[semid]; in kern_semop()
1188 if ((semakptr->u.sem_perm.mode & SEM_ALLOC) == 0) { in kern_semop()
1192 seq = semakptr->u.sem_perm.seq; in kern_semop()
1197 if ((error = sem_prison_cansee(rpr, semakptr)) != 0) in kern_semop()
1208 if (sopptr->sem_num >= semakptr->u.sem_nsems) { in kern_semop()
1217 if ((error = ipcperm(td, &semakptr->u.sem_perm, j))) { in kern_semop()
1222 error = mac_sysvsem_check_semop(td->td_ucred, semakptr, j); in kern_semop()
1242 semptr = &semakptr->u.__sem_base[sopptr->sem_num]; in kern_semop()
1247 semakptr, semakptr->u.__sem_base, semptr, in kern_semop()
1289 semakptr->u.__sem_base[sops[j].sem_num].semval -= in kern_semop()
1311 error = msleep_sbt(semakptr, sema_mtxp, (PZERO - 4) | PCATCH, in kern_semop()
1319 seq = semakptr->u.sem_perm.seq; in kern_semop()
1320 if ((semakptr->u.sem_perm.mode & SEM_ALLOC) == 0 || in kern_semop()
1331 semptr = &semakptr->u.__sem_base[sopptr->sem_num]; in kern_semop()
1401 semakptr->u.__sem_base[sops[j].sem_num].semval -= in kern_semop()
1414 semptr = &semakptr->u.__sem_base[sopptr->sem_num]; in kern_semop()
1417 semakptr->u.sem_otime = time_second; in kern_semop()
1425 wakeup(semakptr); in kern_semop()
1445 struct semid_kernel *semakptr; in semexit_myhook() local
1480 semakptr = &sema[semid]; in semexit_myhook()
1484 if ((semakptr->u.sem_perm.mode & SEM_ALLOC) == 0 || in semexit_myhook()
1485 (semakptr->u.sem_perm.seq != seq)) { in semexit_myhook()
1489 if (semnum >= semakptr->u.sem_nsems) in semexit_myhook()
1497 semakptr->u.__sem_base[semnum].semval)); in semexit_myhook()
1499 if (adjval < 0 && semakptr->u.__sem_base[semnum].semval < in semexit_myhook()
1501 semakptr->u.__sem_base[semnum].semval = 0; in semexit_myhook()
1503 semakptr->u.__sem_base[semnum].semval += adjval; in semexit_myhook()
1505 wakeup(semakptr); in semexit_myhook()