Lines Matching refs:shmseg

247 	struct shmid_kernel *shmseg;
252 shmseg = &shmsegs[segnum];
253 if ((shmseg->u.shm_perm.mode & (SHMSEG_ALLOCATED | SHMSEG_REMOVED))
255 shmseg->u.shm_perm._seq != IPCID_TO_SEQ(shmid))
257 return shmseg;
261 shm_deallocate_segment(struct shmid_kernel *shmseg)
266 for (shm_handle = CAST_DOWN(void *,shmseg->u.shm_internal); /* tunnel */
273 shmseg->u.shm_internal = USER_ADDR_NULL; /* tunnel */
274 size = mach_vm_round_page(shmseg->u.shm_segsz);
277 shmseg->u.shm_perm.mode = SHMSEG_FREE;
280 mac_sysvshm_label_recycle(shmseg);
288 struct shmid_kernel *shmseg;
293 shmseg = &shmsegs[segnum];
294 size = mach_vm_round_page(shmseg->u.shm_segsz); /* XXX done for us? */
301 shmseg->u.shm_dtime = sysv_shmtime();
302 if ((--shmseg->u.shm_nattch <= 0) &&
303 (shmseg->u.shm_perm.mode & SHMSEG_REMOVED)) {
304 shm_deallocate_segment(shmseg);
333 for (i = 0; i < shminfo.shmseg; i++, shmmap_s++)
337 if (i == shminfo.shmseg) {
365 struct shmid_kernel *shmseg;
391 size = shminfo.shmseg * sizeof(struct shmmap_state);
397 for (i = 0; i < shminfo.shmseg; i++)
401 shmseg = shm_find_segment_by_shmid(uap->shmid);
402 if (shmseg == NULL) {
407 AUDIT_ARG(svipc_perm, &shmseg->u.shm_perm);
408 error = ipcperm(kauth_cred_get(), &shmseg->u.shm_perm,
416 error = mac_sysvshm_check_shmat(kauth_cred_get(), shmseg, uap->shmflg);
422 for (i = 0; i < shminfo.shmseg; i++) {
427 if (i >= shminfo.shmseg) {
432 map_size = mach_vm_round_page(shmseg->u.shm_segsz);
475 for (shm_handle = CAST_DOWN(void *, shmseg->u.shm_internal);/* tunnel */
499 shmseg->u.shm_lpid = p->p_pid;
500 shmseg->u.shm_atime = sysv_shmtime();
501 shmseg->u.shm_nattch++;
548 struct shmid_kernel *shmseg;
561 shmseg = shm_find_segment_by_shmid(uap->shmid);
562 if (shmseg == NULL) {
570 AUDIT_ARG(svipc_perm, &shmseg->u.shm_perm);
573 error = mac_sysvshm_check_shmctl(cred, shmseg, uap->cmd);
581 error = ipcperm(cred, &shmseg->u.shm_perm, IPC_R);
588 error = copyout((caddr_t)&shmseg->u, uap->buf, sizeof(struct user_shmid_ds));
591 shmid_ds_64to32(&shmseg->u, &shmid_ds32);
600 error = ipcperm(cred, &shmseg->u.shm_perm, IPC_M);
617 shmseg->u.shm_perm.uid = inbuf.shm_perm.uid;
618 shmseg->u.shm_perm.gid = inbuf.shm_perm.gid;
619 shmseg->u.shm_perm.mode =
620 (shmseg->u.shm_perm.mode & ~ACCESSPERMS) |
622 shmseg->u.shm_ctime = sysv_shmtime();
625 error = ipcperm(cred, &shmseg->u.shm_perm, IPC_M);
630 shmseg->u.shm_perm._key = IPC_PRIVATE;
631 shmseg->u.shm_perm.mode |= SHMSEG_REMOVED;
632 if (shmseg->u.shm_nattch <= 0) {
633 shm_deallocate_segment(shmseg);
655 struct shmid_kernel *shmseg;
658 shmseg = &shmsegs[segnum];
659 if (shmseg->u.shm_perm.mode & SHMSEG_REMOVED) {
665 shmseg->u.shm_perm.mode |= SHMSEG_WANTED;
666 error = tsleep((caddr_t)shmseg, PLOCK | PCATCH, "shmget", 0);
680 if ((shmseg->u.shm_perm.mode & mode) != mode)
684 error = mac_sysvshm_check_shmget(kauth_cred_get(), shmseg, uap->shmflg);
689 if (uap->size && uap->size > shmseg->u.shm_segsz)
695 *retval = IXSEQ_TO_IPCID(segnum, shmseg->u.shm_perm);
705 struct shmid_kernel *shmseg;
725 panic("shmseg free count inconsistent");
731 shmseg = &shmsegs[segnum];
738 shmseg->u.shm_perm.mode = SHMSEG_ALLOCATED | SHMSEG_REMOVED;
739 shmseg->u.shm_perm._key = uap->key;
740 shmseg->u.shm_perm._seq = (shmseg->u.shm_perm._seq + 1) & 0x7fff;
767 shmseg->u.shm_internal = CAST_USER_ADDR_T(shm_handle);/* tunnel */
774 shmid = IXSEQ_TO_IPCID(segnum, shmseg->u.shm_perm);
776 shmseg->u.shm_perm.cuid = shmseg->u.shm_perm.uid = kauth_cred_getuid(cred);
777 shmseg->u.shm_perm.cgid = shmseg->u.shm_perm.gid = kauth_cred_getgid(cred);
778 shmseg->u.shm_perm.mode = (shmseg->u.shm_perm.mode & SHMSEG_WANTED) |
780 shmseg->u.shm_segsz = uap->size;
781 shmseg->u.shm_cpid = p->p_pid;
782 shmseg->u.shm_lpid = shmseg->u.shm_nattch = 0;
783 shmseg->u.shm_atime = shmseg->u.shm_dtime = 0;
785 mac_sysvshm_label_associate(cred, shmseg);
787 shmseg->u.shm_ctime = sysv_shmtime();
790 AUDIT_ARG(svipc_perm, &shmseg->u.shm_perm);
791 if (shmseg->u.shm_perm.mode & SHMSEG_WANTED) {
796 shmseg->u.shm_perm.mode &= ~SHMSEG_WANTED;
797 wakeup((caddr_t)shmseg);
804 for (shm_handle = CAST_DOWN(void *,shmseg->u.shm_internal); /* tunnel */
811 shmseg->u.shm_internal = USER_ADDR_NULL; /* tunnel */
913 size = shminfo.shmseg * sizeof(struct shmmap_state);
918 for (i = 0; i < shminfo.shmseg; i++, shmmap_s++)
940 for (i = 0; i < shminfo.shmseg; i++, shmmap_s++)
966 for (i = 0; i < shminfo.shmseg; i++, shmmap_s++)
1179 SYSCTL_PROC(_kern_sysv, OID_AUTO, shmseg, CTLTYPE_QUAD | CTLFLAG_RW | CTLFLAG_LOCKED,
1180 &shminfo.shmseg, 0, &sysctl_shminfo ,"Q","shmseg");