Lines Matching defs:msqkptr

315 	struct msqid_kernel *msqkptr;
327 msqkptr = &msqids[msqid];
328 if (msqkptr->u.msg_qbytes != 0 ||
329 (msqkptr->u.msg_perm.mode & MSG_LOCKED) != 0)
410 msq_remove(struct msqid_kernel *msqkptr)
414 racct_sub_cred(msqkptr->cred, RACCT_NMSGQ, 1);
415 racct_sub_cred(msqkptr->cred, RACCT_MSGQQUEUED, msqkptr->u.msg_qnum);
416 racct_sub_cred(msqkptr->cred, RACCT_MSGQSIZE, msqkptr->u.msg_cbytes);
417 crfree(msqkptr->cred);
418 msqkptr->cred = NULL;
421 msghdr = msqkptr->u.__msg_first;
426 msqkptr->u.msg_cbytes -= msghdr->msg_ts;
427 msqkptr->u.msg_qnum--;
433 if (msqkptr->u.msg_cbytes != 0)
435 if (msqkptr->u.msg_qnum != 0)
438 msqkptr->u.msg_qbytes = 0; /* Mark it as free */
441 mac_sysvmsq_cleanup(msqkptr);
444 wakeup(msqkptr);
460 msq_prison_cansee(struct prison *rpr, struct msqid_kernel *msqkptr)
463 if (msqkptr->cred == NULL ||
464 !(rpr == msqkptr->cred->cr_prison ||
465 prison_ischild(rpr, msqkptr->cred->cr_prison)))
499 struct msqid_kernel *msqkptr;
516 msqkptr = &msqids[msqix];
519 if (msqkptr->u.msg_qbytes == 0) {
524 if (msqkptr->u.msg_perm.seq != IPCID_TO_SEQ(msqid)) {
530 error = msq_prison_cansee(rpr, msqkptr);
537 error = mac_sysvmsq_check_msqctl(td->td_ucred, msqkptr, cmd);
551 if ((error = ipcperm(td, &msqkptr->u.msg_perm, IPC_M)))
564 for (msghdr = msqkptr->u.__msg_first; msghdr != NULL;
572 msq_remove(msqkptr);
579 if ((error = ipcperm(td, &msqkptr->u.msg_perm, IPC_M)))
581 if (msqbuf->msg_qbytes > msqkptr->u.msg_qbytes) {
596 msqkptr->u.msg_perm.uid = msqbuf->msg_perm.uid; /* change the owner */
597 msqkptr->u.msg_perm.gid = msqbuf->msg_perm.gid; /* change the owner */
598 msqkptr->u.msg_perm.mode = (msqkptr->u.msg_perm.mode & ~0777) |
600 msqkptr->u.msg_qbytes = msqbuf->msg_qbytes;
601 msqkptr->u.msg_ctime = time_second;
605 if ((error = ipcperm(td, &msqkptr->u.msg_perm, IPC_R))) {
609 *msqbuf = msqkptr->u;
610 if (td->td_ucred->cr_prison != msqkptr->cred->cr_prison)
648 struct msqid_kernel *msqkptr = NULL;
658 msqkptr = &msqids[msqid];
659 if (msqkptr->u.msg_qbytes != 0 &&
660 msqkptr->cred != NULL &&
661 msqkptr->cred->cr_prison == cred->cr_prison &&
662 msqkptr->u.msg_perm.key == key)
673 msqkptr->u.msg_perm));
674 if ((error = ipcperm(td, &msqkptr->u.msg_perm,
681 error = mac_sysvmsq_check_msqget(cred, msqkptr);
698 msqkptr = &msqids[msqid];
699 if (msqkptr->u.msg_qbytes == 0 &&
700 (msqkptr->u.msg_perm.mode & MSG_LOCKED) == 0)
720 msqkptr->u.msg_perm.key = key;
721 msqkptr->u.msg_perm.cuid = cred->cr_uid;
722 msqkptr->u.msg_perm.uid = cred->cr_uid;
723 msqkptr->u.msg_perm.cgid = cred->cr_gid;
724 msqkptr->u.msg_perm.gid = cred->cr_gid;
725 msqkptr->u.msg_perm.mode = (msgflg & 0777);
726 msqkptr->cred = crhold(cred);
728 msqkptr->u.msg_perm.seq = (msqkptr->u.msg_perm.seq + 1) & 0x7fff;
729 msqkptr->u.__msg_first = NULL;
730 msqkptr->u.__msg_last = NULL;
731 msqkptr->u.msg_cbytes = 0;
732 msqkptr->u.msg_qnum = 0;
733 msqkptr->u.msg_qbytes = msginfo.msgmnb;
734 msqkptr->u.msg_lspid = 0;
735 msqkptr->u.msg_lrpid = 0;
736 msqkptr->u.msg_stime = 0;
737 msqkptr->u.msg_rtime = 0;
738 msqkptr->u.msg_ctime = time_second;
740 mac_sysvmsq_create(cred, msqkptr);
742 AUDIT_ARG_SVIPC_PERM(&msqkptr->u.msg_perm);
751 td->td_retval[0] = IXSEQ_TO_IPCID(msqid, msqkptr->u.msg_perm);
770 struct msqid_kernel *msqkptr;
793 msqkptr = &msqids[msqix];
794 AUDIT_ARG_SVIPC_PERM(&msqkptr->u.msg_perm);
795 if (msqkptr->u.msg_qbytes == 0) {
800 if (msqkptr->u.msg_perm.seq != IPCID_TO_SEQ(msqid)) {
806 if ((error = msq_prison_cansee(rpr, msqkptr))) {
811 if ((error = ipcperm(td, &msqkptr->u.msg_perm, IPC_W))) {
817 error = mac_sysvmsq_check_msqsnd(td->td_ucred, msqkptr);
852 if (msgsz > msqkptr->u.msg_qbytes) {
853 DPRINTF(("msgsz > msqkptr->u.msg_qbytes\n"));
858 if (msqkptr->u.msg_perm.mode & MSG_LOCKED) {
862 if (msgsz + msqkptr->u.msg_cbytes > msqkptr->u.msg_qbytes) {
885 if ((msqkptr->u.msg_perm.mode & MSG_LOCKED) != 0) {
892 msqkptr->u.msg_perm.mode |= MSG_LOCKED;
896 error = msleep(msqkptr, &msq_mtx, (PZERO - 4) | PCATCH,
900 msqkptr->u.msg_perm.mode &= ~MSG_LOCKED;
915 if (msqkptr->u.msg_qbytes == 0) {
932 if (msqkptr->u.msg_perm.mode & MSG_LOCKED)
936 if (msgsz + msqkptr->u.msg_cbytes > msqkptr->u.msg_qbytes)
946 if ((msqkptr->u.msg_perm.mode & MSG_LOCKED) != 0)
948 msqkptr->u.msg_perm.mode |= MSG_LOCKED;
965 mac_sysvmsg_create(td->td_ucred, msqkptr, msghdr);
996 msqkptr->u.msg_perm.mode &= ~MSG_LOCKED;
997 wakeup(msqkptr);
1025 msqkptr->u.msg_perm.mode &= ~MSG_LOCKED;
1026 wakeup(msqkptr);
1041 msqkptr->u.msg_perm.mode &= ~MSG_LOCKED;
1047 if (msqkptr->u.msg_qbytes == 0) {
1049 wakeup(msqkptr);
1066 error = mac_sysvmsq_check_msgmsq(td->td_ucred, msghdr, msqkptr);
1069 wakeup(msqkptr);
1077 if (msqkptr->u.__msg_first == NULL) {
1078 msqkptr->u.__msg_first = msghdr;
1079 msqkptr->u.__msg_last = msghdr;
1081 msqkptr->u.__msg_last->msg_next = msghdr;
1082 msqkptr->u.__msg_last = msghdr;
1084 msqkptr->u.__msg_last->msg_next = NULL;
1086 msqkptr->u.msg_cbytes += msghdr->msg_ts;
1087 msqkptr->u.msg_qnum++;
1088 msqkptr->u.msg_lspid = td->td_proc->p_pid;
1089 msqkptr->u.msg_stime = time_second;
1091 wakeup(msqkptr);
1140 struct msqid_kernel *msqkptr;
1159 msqkptr = &msqids[msqix];
1161 AUDIT_ARG_SVIPC_PERM(&msqkptr->u.msg_perm);
1162 if (msqkptr->u.msg_qbytes == 0) {
1167 if (msqkptr->u.msg_perm.seq != IPCID_TO_SEQ(msqid)) {
1173 if ((error = msq_prison_cansee(rpr, msqkptr))) {
1178 if ((error = ipcperm(td, &msqkptr->u.msg_perm, IPC_R))) {
1184 error = mac_sysvmsq_check_msqrcv(td->td_ucred, msqkptr);
1192 msghdr = msqkptr->u.__msg_first;
1208 if (msqkptr->u.__msg_first ==
1209 msqkptr->u.__msg_last) {
1210 msqkptr->u.__msg_first = NULL;
1211 msqkptr->u.__msg_last = NULL;
1213 msqkptr->u.__msg_first = msghdr->msg_next;
1214 if (msqkptr->u.__msg_first == NULL)
1223 prev = &(msqkptr->u.__msg_first);
1255 if (msghdr == msqkptr->u.__msg_last) {
1258 &msqkptr->u.__msg_first)
1260 msqkptr->u.__msg_first =
1262 msqkptr->u.__msg_last =
1266 &msqkptr->u.__msg_first)
1268 msqkptr->u.__msg_last =
1305 error = msleep(msqkptr, &msq_mtx, (PZERO - 4) | PCATCH,
1319 if (msqkptr->u.msg_qbytes == 0 ||
1320 msqkptr->u.msg_perm.seq != IPCID_TO_SEQ(msqid)) {
1333 msqkptr->u.msg_cbytes -= msghdr->msg_ts;
1334 msqkptr->u.msg_qnum--;
1335 msqkptr->u.msg_lrpid = td->td_proc->p_pid;
1336 msqkptr->u.msg_rtime = time_second;
1338 racct_sub_cred(msqkptr->cred, RACCT_MSGQQUEUED, 1);
1339 racct_sub_cred(msqkptr->cred, RACCT_MSGQSIZE, msghdr->msg_ts);
1376 wakeup(msqkptr);
1388 wakeup(msqkptr);
1689 struct msqid_kernel *msqkptr;
1695 msqkptr = &msqids[i];
1696 if (msqkptr->u.msg_qbytes != 0 &&
1697 msqkptr->cred != NULL && msqkptr->cred->cr_prison == pr)
1698 msq_remove(msqkptr);