Lines Matching refs:semakptr

92     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
563 semakptr = &sema[semidx]; in sem_remove()
564 KASSERT(semakptr->u.__sem_base - sem + semakptr->u.sem_nsems <= semtot, in sem_remove()
566 semidx, semakptr->u.__sem_base, sem, semakptr->u.sem_nsems, in sem_remove()
569 semakptr->u.sem_perm.cuid = cred ? cred->cr_uid : 0; in sem_remove()
570 semakptr->u.sem_perm.uid = cred ? cred->cr_uid : 0; in sem_remove()
571 semakptr->u.sem_perm.mode = 0; in sem_remove()
572 racct_sub_cred(semakptr->cred, RACCT_NSEM, semakptr->u.sem_nsems); in sem_remove()
573 crfree(semakptr->cred); in sem_remove()
574 semakptr->cred = NULL; in sem_remove()
579 mac_sysvsem_cleanup(semakptr); in sem_remove()
581 wakeup(semakptr); in sem_remove()
584 sema[i].u.__sem_base > semakptr->u.__sem_base) in sem_remove()
587 for (i = semakptr->u.__sem_base - sem + semakptr->u.sem_nsems; in sem_remove()
589 sem[i - semakptr->u.sem_nsems] = sem[i]; in sem_remove()
592 sema[i].u.__sem_base > semakptr->u.__sem_base) { in sem_remove()
593 sema[i].u.__sem_base -= semakptr->u.sem_nsems; in sem_remove()
597 semtot -= semakptr->u.sem_nsems; in sem_remove()
613 sem_prison_cansee(struct prison *rpr, struct semid_kernel *semakptr) in sem_prison_cansee() argument
616 if (semakptr->cred == NULL || in sem_prison_cansee()
617 !(rpr == semakptr->cred->cr_prison || in sem_prison_cansee()
618 prison_ischild(rpr, semakptr->cred->cr_prison))) in sem_prison_cansee()
701 struct semid_kernel *semakptr; in kern_semctl() local
726 semakptr = &sema[semid]; in kern_semctl()
729 if ((semakptr->u.sem_perm.mode & SEM_ALLOC) == 0) { in kern_semctl()
733 if ((error = sem_prison_cansee(rpr, semakptr))) in kern_semctl()
735 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
738 error = mac_sysvsem_check_semctl(cred, semakptr, cmd); in kern_semctl()
742 bcopy(&semakptr->u, arg->buf, sizeof(struct semid_ds)); in kern_semctl()
743 if (cred->cr_prison != semakptr->cred->cr_prison) in kern_semctl()
745 *rval = IXSEQ_TO_IPCID(semid, semakptr->u.sem_perm); in kern_semctl()
754 semakptr = &sema[semidx]; in kern_semctl()
761 error = mac_sysvsem_check_semctl(cred, semakptr, cmd); in kern_semctl()
771 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
773 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_M))) in kern_semctl()
780 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
782 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_M))) in kern_semctl()
785 semakptr->u.sem_perm.uid = sbuf->sem_perm.uid; in kern_semctl()
786 semakptr->u.sem_perm.gid = sbuf->sem_perm.gid; in kern_semctl()
787 semakptr->u.sem_perm.mode = (semakptr->u.sem_perm.mode & in kern_semctl()
789 semakptr->u.sem_ctime = time_second; in kern_semctl()
793 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
795 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
797 bcopy(&semakptr->u, arg->buf, sizeof(struct semid_ds)); in kern_semctl()
798 if (cred->cr_prison != semakptr->cred->cr_prison) in kern_semctl()
810 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
812 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
814 if (semnum < 0 || semnum >= semakptr->u.sem_nsems) { in kern_semctl()
818 *rval = semakptr->u.__sem_base[semnum].semncnt; in kern_semctl()
822 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
824 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
826 if (semnum < 0 || semnum >= semakptr->u.sem_nsems) { in kern_semctl()
830 *rval = semakptr->u.__sem_base[semnum].sempid; in kern_semctl()
834 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
836 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
838 if (semnum < 0 || semnum >= semakptr->u.sem_nsems) { in kern_semctl()
842 *rval = semakptr->u.__sem_base[semnum].semval; in kern_semctl()
866 count = semakptr->u.sem_nsems; in kern_semctl()
870 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
872 KASSERT(count == semakptr->u.sem_nsems, ("nsems changed")); in kern_semctl()
873 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
875 for (i = 0; i < semakptr->u.sem_nsems; i++) in kern_semctl()
876 array[i] = semakptr->u.__sem_base[i].semval; in kern_semctl()
883 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
885 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R))) in kern_semctl()
887 if (semnum < 0 || semnum >= semakptr->u.sem_nsems) { in kern_semctl()
891 *rval = semakptr->u.__sem_base[semnum].semzcnt; in kern_semctl()
895 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
897 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_W))) in kern_semctl()
899 if (semnum < 0 || semnum >= semakptr->u.sem_nsems) { in kern_semctl()
907 semakptr->u.__sem_base[semnum].semval = arg->val; in kern_semctl()
911 wakeup(semakptr); in kern_semctl()
919 count = semakptr->u.sem_nsems; in kern_semctl()
926 if ((error = semvalid(semid, rpr, semakptr)) != 0) in kern_semctl()
928 KASSERT(count == semakptr->u.sem_nsems, ("nsems changed")); in kern_semctl()
929 if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_W))) in kern_semctl()
931 for (i = 0; i < semakptr->u.sem_nsems; i++) { in kern_semctl()
937 semakptr->u.__sem_base[i].semval = usval; in kern_semctl()
942 wakeup(semakptr); in kern_semctl()
1107 struct semid_kernel *semakptr; in sys_semop() local
1163 semakptr = &sema[semid]; in sys_semop()
1166 if ((semakptr->u.sem_perm.mode & SEM_ALLOC) == 0) { in sys_semop()
1170 seq = semakptr->u.sem_perm.seq; in sys_semop()
1175 if ((error = sem_prison_cansee(rpr, semakptr)) != 0) in sys_semop()
1186 if (sopptr->sem_num >= semakptr->u.sem_nsems) { in sys_semop()
1195 if ((error = ipcperm(td, &semakptr->u.sem_perm, j))) { in sys_semop()
1200 error = mac_sysvsem_check_semop(td->td_ucred, semakptr, j); in sys_semop()
1220 semptr = &semakptr->u.__sem_base[sopptr->sem_num]; in sys_semop()
1225 semakptr, semakptr->u.__sem_base, semptr, in sys_semop()
1267 semakptr->u.__sem_base[sops[j].sem_num].semval -= in sys_semop()
1289 error = msleep(semakptr, sema_mtxp, (PZERO - 4) | PCATCH, in sys_semop()
1297 seq = semakptr->u.sem_perm.seq; in sys_semop()
1298 if ((semakptr->u.sem_perm.mode & SEM_ALLOC) == 0 || in sys_semop()
1309 semptr = &semakptr->u.__sem_base[sopptr->sem_num]; in sys_semop()
1378 semakptr->u.__sem_base[sops[j].sem_num].semval -= in sys_semop()
1391 semptr = &semakptr->u.__sem_base[sopptr->sem_num]; in sys_semop()
1394 semakptr->u.sem_otime = time_second; in sys_semop()
1402 wakeup(semakptr); in sys_semop()
1422 struct semid_kernel *semakptr; in semexit_myhook() local
1457 semakptr = &sema[semid]; in semexit_myhook()
1461 if ((semakptr->u.sem_perm.mode & SEM_ALLOC) == 0 || in semexit_myhook()
1462 (semakptr->u.sem_perm.seq != seq)) { in semexit_myhook()
1466 if (semnum >= semakptr->u.sem_nsems) in semexit_myhook()
1474 semakptr->u.__sem_base[semnum].semval)); in semexit_myhook()
1476 if (adjval < 0 && semakptr->u.__sem_base[semnum].semval < in semexit_myhook()
1478 semakptr->u.__sem_base[semnum].semval = 0; in semexit_myhook()
1480 semakptr->u.__sem_base[semnum].semval += adjval; in semexit_myhook()
1482 wakeup(semakptr); in semexit_myhook()