Lines Matching defs:msqkptr

311 	struct msqid_kernel *msqkptr;
323 msqkptr = &msqids[msqid];
324 if (msqkptr->u.msg_qbytes != 0 ||
325 (msqkptr->u.msg_perm.mode & MSG_LOCKED) != 0)
408 msq_remove(struct msqid_kernel *msqkptr)
412 racct_sub_cred(msqkptr->cred, RACCT_NMSGQ, 1);
413 racct_sub_cred(msqkptr->cred, RACCT_MSGQQUEUED, msqkptr->u.msg_qnum);
414 racct_sub_cred(msqkptr->cred, RACCT_MSGQSIZE, msqkptr->u.msg_cbytes);
415 crfree(msqkptr->cred);
416 msqkptr->cred = NULL;
419 msghdr = msqkptr->u.msg_first;
424 msqkptr->u.msg_cbytes -= msghdr->msg_ts;
425 msqkptr->u.msg_qnum--;
431 if (msqkptr->u.msg_cbytes != 0)
433 if (msqkptr->u.msg_qnum != 0)
436 msqkptr->u.msg_qbytes = 0; /* Mark it as free */
439 mac_sysvmsq_cleanup(msqkptr);
442 wakeup(msqkptr);
458 msq_prison_cansee(struct prison *rpr, struct msqid_kernel *msqkptr)
461 if (msqkptr->cred == NULL ||
462 !(rpr == msqkptr->cred->cr_prison ||
463 prison_ischild(rpr, msqkptr->cred->cr_prison)))
503 register struct msqid_kernel *msqkptr;
518 msqkptr = &msqids[msqix];
521 if (msqkptr->u.msg_qbytes == 0) {
526 if (msqkptr->u.msg_perm.seq != IPCID_TO_SEQ(msqid)) {
532 error = msq_prison_cansee(rpr, msqkptr);
539 error = mac_sysvmsq_check_msqctl(td->td_ucred, msqkptr, cmd);
554 if ((error = ipcperm(td, &msqkptr->u.msg_perm, IPC_M)))
567 for (msghdr = msqkptr->u.msg_first; msghdr != NULL;
575 msq_remove(msqkptr);
581 if ((error = ipcperm(td, &msqkptr->u.msg_perm, IPC_M)))
583 if (msqbuf->msg_qbytes > msqkptr->u.msg_qbytes) {
598 msqkptr->u.msg_perm.uid = msqbuf->msg_perm.uid; /* change the owner */
599 msqkptr->u.msg_perm.gid = msqbuf->msg_perm.gid; /* change the owner */
600 msqkptr->u.msg_perm.mode = (msqkptr->u.msg_perm.mode & ~0777) |
602 msqkptr->u.msg_qbytes = msqbuf->msg_qbytes;
603 msqkptr->u.msg_ctime = time_second;
607 if ((error = ipcperm(td, &msqkptr->u.msg_perm, IPC_R))) {
611 *msqbuf = msqkptr->u;
612 if (td->td_ucred->cr_prison != msqkptr->cred->cr_prison)
645 register struct msqid_kernel *msqkptr = NULL;
655 msqkptr = &msqids[msqid];
656 if (msqkptr->u.msg_qbytes != 0 &&
657 msqkptr->cred != NULL &&
658 msqkptr->cred->cr_prison == cred->cr_prison &&
659 msqkptr->u.msg_perm.key == key)
669 if ((error = ipcperm(td, &msqkptr->u.msg_perm,
676 error = mac_sysvmsq_check_msqget(cred, msqkptr);
693 msqkptr = &msqids[msqid];
694 if (msqkptr->u.msg_qbytes == 0 &&
695 (msqkptr->u.msg_perm.mode & MSG_LOCKED) == 0)
715 msqkptr->u.msg_perm.key = key;
716 msqkptr->u.msg_perm.cuid = cred->cr_uid;
717 msqkptr->u.msg_perm.uid = cred->cr_uid;
718 msqkptr->u.msg_perm.cgid = cred->cr_gid;
719 msqkptr->u.msg_perm.gid = cred->cr_gid;
720 msqkptr->u.msg_perm.mode = (msgflg & 0777);
721 msqkptr->cred = crhold(cred);
723 msqkptr->u.msg_perm.seq = (msqkptr->u.msg_perm.seq + 1) & 0x7fff;
724 msqkptr->u.msg_first = NULL;
725 msqkptr->u.msg_last = NULL;
726 msqkptr->u.msg_cbytes = 0;
727 msqkptr->u.msg_qnum = 0;
728 msqkptr->u.msg_qbytes = msginfo.msgmnb;
729 msqkptr->u.msg_lspid = 0;
730 msqkptr->u.msg_lrpid = 0;
731 msqkptr->u.msg_stime = 0;
732 msqkptr->u.msg_rtime = 0;
733 msqkptr->u.msg_ctime = time_second;
735 mac_sysvmsq_create(cred, msqkptr);
745 td->td_retval[0] = IXSEQ_TO_IPCID(msqid, msqkptr->u.msg_perm);
769 register struct msqid_kernel *msqkptr;
791 msqkptr = &msqids[msqix];
792 if (msqkptr->u.msg_qbytes == 0) {
797 if (msqkptr->u.msg_perm.seq != IPCID_TO_SEQ(msqid)) {
803 if ((error = msq_prison_cansee(rpr, msqkptr))) {
808 if ((error = ipcperm(td, &msqkptr->u.msg_perm, IPC_W))) {
814 error = mac_sysvmsq_check_msqsnd(td->td_ucred, msqkptr);
849 if (msgsz > msqkptr->u.msg_qbytes) {
850 DPRINTF(("msgsz > msqkptr->u.msg_qbytes\n"));
855 if (msqkptr->u.msg_perm.mode & MSG_LOCKED) {
859 if (msgsz + msqkptr->u.msg_cbytes > msqkptr->u.msg_qbytes) {
882 if ((msqkptr->u.msg_perm.mode & MSG_LOCKED) != 0) {
889 msqkptr->u.msg_perm.mode |= MSG_LOCKED;
893 error = msleep(msqkptr, &msq_mtx, (PZERO - 4) | PCATCH,
897 msqkptr->u.msg_perm.mode &= ~MSG_LOCKED;
912 if (msqkptr->u.msg_qbytes == 0) {
929 if (msqkptr->u.msg_perm.mode & MSG_LOCKED)
933 if (msgsz + msqkptr->u.msg_cbytes > msqkptr->u.msg_qbytes)
943 if ((msqkptr->u.msg_perm.mode & MSG_LOCKED) != 0)
945 msqkptr->u.msg_perm.mode |= MSG_LOCKED;
962 mac_sysvmsg_create(td->td_ucred, msqkptr, msghdr);
993 msqkptr->u.msg_perm.mode &= ~MSG_LOCKED;
994 wakeup(msqkptr);
1022 msqkptr->u.msg_perm.mode &= ~MSG_LOCKED;
1023 wakeup(msqkptr);
1038 msqkptr->u.msg_perm.mode &= ~MSG_LOCKED;
1044 if (msqkptr->u.msg_qbytes == 0) {
1046 wakeup(msqkptr);
1063 error = mac_sysvmsq_check_msgmsq(td->td_ucred, msghdr, msqkptr);
1066 wakeup(msqkptr);
1074 if (msqkptr->u.msg_first == NULL) {
1075 msqkptr->u.msg_first = msghdr;
1076 msqkptr->u.msg_last = msghdr;
1078 msqkptr->u.msg_last->msg_next = msghdr;
1079 msqkptr->u.msg_last = msghdr;
1081 msqkptr->u.msg_last->msg_next = NULL;
1083 msqkptr->u.msg_cbytes += msghdr->msg_ts;
1084 msqkptr->u.msg_qnum++;
1085 msqkptr->u.msg_lspid = td->td_proc->p_pid;
1086 msqkptr->u.msg_stime = time_second;
1088 wakeup(msqkptr);
1144 register struct msqid_kernel *msqkptr;
1162 msqkptr = &msqids[msqix];
1164 if (msqkptr->u.msg_qbytes == 0) {
1169 if (msqkptr->u.msg_perm.seq != IPCID_TO_SEQ(msqid)) {
1175 if ((error = msq_prison_cansee(rpr, msqkptr))) {
1180 if ((error = ipcperm(td, &msqkptr->u.msg_perm, IPC_R))) {
1186 error = mac_sysvmsq_check_msqrcv(td->td_ucred, msqkptr);
1194 msghdr = msqkptr->u.msg_first;
1210 if (msqkptr->u.msg_first == msqkptr->u.msg_last) {
1211 msqkptr->u.msg_first = NULL;
1212 msqkptr->u.msg_last = NULL;
1214 msqkptr->u.msg_first = msghdr->msg_next;
1215 if (msqkptr->u.msg_first == NULL)
1224 prev = &(msqkptr->u.msg_first);
1256 if (msghdr == msqkptr->u.msg_last) {
1259 &msqkptr->u.msg_first)
1261 msqkptr->u.msg_first =
1263 msqkptr->u.msg_last =
1267 &msqkptr->u.msg_first)
1269 msqkptr->u.msg_last =
1306 error = msleep(msqkptr, &msq_mtx, (PZERO - 4) | PCATCH,
1320 if (msqkptr->u.msg_qbytes == 0 ||
1321 msqkptr->u.msg_perm.seq != IPCID_TO_SEQ(msqid)) {
1334 msqkptr->u.msg_cbytes -= msghdr->msg_ts;
1335 msqkptr->u.msg_qnum--;
1336 msqkptr->u.msg_lrpid = td->td_proc->p_pid;
1337 msqkptr->u.msg_rtime = time_second;
1339 racct_sub_cred(msqkptr->cred, RACCT_MSGQQUEUED, 1);
1340 racct_sub_cred(msqkptr->cred, RACCT_MSGQSIZE, msghdr->msg_ts);
1377 wakeup(msqkptr);
1389 wakeup(msqkptr);
1619 struct msqid_kernel *msqkptr;
1625 msqkptr = &msqids[i];
1626 if (msqkptr->u.msg_qbytes != 0 &&
1627 msqkptr->cred != NULL && msqkptr->cred->cr_prison == pr)
1628 msq_remove(msqkptr);