Lines Matching defs:shmseg
175 .shmseg = SHMSEG,
188 SYSCTL_ULONG(_kern_ipc, OID_AUTO, shmseg, CTLFLAG_RDTUN, &shminfo.shmseg, 0,
227 struct shmid_kernel *shmseg;
233 shmseg = &shmsegs[segnum];
234 if ((shmseg->u.shm_perm.mode & SHMSEG_ALLOCATED) == 0 ||
236 (shmseg->u.shm_perm.mode & SHMSEG_REMOVED) != 0) ||
237 (is_shmid && shmseg->u.shm_perm.seq != IPCID_TO_SEQ(arg)) ||
238 shm_prison_cansee(rpr, shmseg) != 0)
240 return (shmseg);
244 shm_deallocate_segment(struct shmid_kernel *shmseg)
250 vm_object_deallocate(shmseg->object);
251 shmseg->object = NULL;
252 size = round_page(shmseg->u.shm_segsz);
255 shmseg->u.shm_perm.mode = SHMSEG_FREE;
257 mac_sysvshm_cleanup(shmseg);
259 racct_sub_cred(shmseg->cred, RACCT_NSHM, 1);
260 racct_sub_cred(shmseg->cred, RACCT_SHMSIZE, size);
261 crfree(shmseg->cred);
262 shmseg->cred = NULL;
268 struct shmid_kernel *shmseg;
277 shmseg = &shmsegs[segnum];
278 size = round_page(shmseg->u.shm_segsz);
283 shmseg->u.shm_dtime = time_second;
284 if (--shmseg->u.shm_nattch == 0 &&
285 (shmseg->u.shm_perm.mode & SHMSEG_REMOVED)) {
286 shm_deallocate_segment(shmseg);
293 shm_remove(struct shmid_kernel *shmseg, int segnum)
296 shmseg->u.shm_perm.key = IPC_PRIVATE;
297 shmseg->u.shm_perm.mode |= SHMSEG_REMOVED;
298 if (shmseg->u.shm_nattch == 0) {
299 shm_deallocate_segment(shmseg);
317 shm_prison_cansee(struct prison *rpr, struct shmid_kernel *shmseg)
320 if (shmseg->cred == NULL ||
321 !(rpr == shmseg->cred->cr_prison ||
322 prison_ischild(rpr, shmseg->cred->cr_prison)))
344 for (i = 0; i < shminfo.shmseg; i++, shmmap_s++) {
350 if (i == shminfo.shmseg)
383 struct shmid_kernel *shmseg;
399 shmmap_s = malloc(shminfo.shmseg * sizeof(struct shmmap_state),
401 for (i = 0; i < shminfo.shmseg; i++)
406 shmseg = shm_find_segment(rpr, shmid, true);
407 if (shmseg == NULL)
409 error = ipcperm(td, &shmseg->u.shm_perm,
414 error = mac_sysvshm_check_shmat(td->td_ucred, shmseg, shmflg);
418 for (i = 0; i < shminfo.shmseg; i++) {
423 if (i >= shminfo.shmseg)
425 size = round_page(shmseg->u.shm_segsz);
450 vm_object_reference(shmseg->object);
451 rv = vm_map_find(&p->p_vmspace->vm_map, shmseg->object, 0, &attach_va,
454 vm_object_deallocate(shmseg->object);
460 shmseg->u.shm_lpid = p->p_pid;
461 shmseg->u.shm_atime = time_second;
462 shmseg->u.shm_nattch++;
497 struct shmid_kernel *shmseg;
541 shmseg = shm_find_segment(rpr, shmid, cmd != SHM_STAT);
542 if (shmseg == NULL)
545 error = mac_sysvshm_check_shmctl(td->td_ucred, shmseg, cmd);
553 error = ipcperm(td, &shmseg->u.shm_perm, IPC_R);
556 memcpy(shmidp, &shmseg->u, sizeof(struct shmid_ds));
557 if (td->td_ucred->cr_prison != shmseg->cred->cr_prison)
563 shmseg->u.shm_perm);
569 error = ipcperm(td, &shmseg->u.shm_perm, IPC_M);
572 shmseg->u.shm_perm.uid = shmidp->shm_perm.uid;
573 shmseg->u.shm_perm.gid = shmidp->shm_perm.gid;
574 shmseg->u.shm_perm.mode =
575 (shmseg->u.shm_perm.mode & ~ACCESSPERMS) |
577 shmseg->u.shm_ctime = time_second;
580 error = ipcperm(td, &shmseg->u.shm_perm, IPC_M);
583 shm_remove(shmseg, IPCID_TO_IX(shmid));
659 struct shmid_kernel *shmseg;
667 shmseg = &shmsegs[segnum];
671 error = mac_sysvshm_check_shmget(td->td_ucred, shmseg, shmflg);
675 if (size != 0 && size > shmseg->u.shm_segsz)
677 td->td_retval[0] = IXSEQ_TO_IPCID(segnum, shmseg->u.shm_perm);
685 struct shmid_kernel *shmseg;
712 shmseg = &shmsegs[segnum];
751 shmseg->object = shm_object;
752 shmseg->u.shm_perm.cuid = shmseg->u.shm_perm.uid = cred->cr_uid;
753 shmseg->u.shm_perm.cgid = shmseg->u.shm_perm.gid = cred->cr_gid;
754 shmseg->u.shm_perm.mode = (mode & ACCESSPERMS) | SHMSEG_ALLOCATED;
755 shmseg->u.shm_perm.key = key;
756 shmseg->u.shm_perm.seq = (shmseg->u.shm_perm.seq + 1) & 0x7fff;
757 shmseg->cred = crhold(cred);
758 shmseg->u.shm_segsz = size;
759 shmseg->u.shm_cpid = td->td_proc->p_pid;
760 shmseg->u.shm_lpid = shmseg->u.shm_nattch = 0;
761 shmseg->u.shm_atime = shmseg->u.shm_dtime = 0;
763 mac_sysvshm_create(cred, shmseg);
765 shmseg->u.shm_ctime = time_second;
768 td->td_retval[0] = IXSEQ_TO_IPCID(segnum, shmseg->u.shm_perm);
821 size = shminfo.shmseg * sizeof(struct shmmap_state);
825 for (i = 0; i < shminfo.shmseg; i++, shmmap_s++) {
852 for (i = 0, shm = base; i < shminfo.shmseg; i++, shm++) {
1320 struct shmid_kernel *shmseg;
1325 shmseg = &shmsegs[i];
1326 if ((shmseg->u.shm_perm.mode & SHMSEG_ALLOCATED) &&
1327 shmseg->cred != NULL && shmseg->cred->cr_prison == pr) {
1328 shm_remove(shmseg, i);
1360 struct shmid_kernel *shmseg;
1371 shmseg = shm_find_segment(rpr, uap->shmid, true);
1372 if (shmseg == NULL) {
1376 error = ipcperm(td, &shmseg->u.shm_perm, IPC_R);
1382 error = mac_sysvshm_check_shmctl(td->td_ucred, shmseg, uap->cmd);
1388 ipcperm_new2old(&shmseg->u.shm_perm, &outbuf.shm_perm);
1389 outbuf.shm_segsz = shmseg->u.shm_segsz;
1390 outbuf.shm_cpid = shmseg->u.shm_cpid;
1391 outbuf.shm_lpid = shmseg->u.shm_lpid;
1392 outbuf.shm_nattch = shmseg->u.shm_nattch;
1393 outbuf.shm_atime = shmseg->u.shm_atime;
1394 outbuf.shm_dtime = shmseg->u.shm_dtime;
1395 outbuf.shm_ctime = shmseg->u.shm_ctime;
1396 outbuf.shm_handle = shmseg->object;
1525 CP(u.shminfo, u32.shminfo32, shmseg);
1611 CP(u.shminfo, u32.shminfo32, shmseg);