tag | line | file | source code |
shp | 52 | ipc/shm.c | struct shmid_ds *shp; |
shp | 55 | ipc/shm.c | while ((shp = shm_segs[id]) == IPC_NOID) |
shp | 57 | ipc/shm.c | if (shp == IPC_UNUSED) |
shp | 59 | ipc/shm.c | if (key == shp->shm_perm.key) |
shp | 70 | ipc/shm.c | struct shmid_ds *shp; |
shp | 86 | ipc/shm.c | shp = (struct shmid_ds *) kmalloc (sizeof (*shp), GFP_KERNEL); |
shp | 87 | ipc/shm.c | if (!shp) { |
shp | 94 | ipc/shm.c | shp->shm_pages = (ulong *) kmalloc (numpages*sizeof(ulong),GFP_KERNEL); |
shp | 95 | ipc/shm.c | if (!shp->shm_pages) { |
shp | 99 | ipc/shm.c | kfree(shp); |
shp | 103 | ipc/shm.c | for (i=0; i< numpages; shp->shm_pages[i++] = 0); |
shp | 105 | ipc/shm.c | shp->shm_perm.key = key; |
shp | 106 | ipc/shm.c | shp->shm_perm.mode = (shmflg & S_IRWXUGO); |
shp | 107 | ipc/shm.c | shp->shm_perm.cuid = shp->shm_perm.uid = current->euid; |
shp | 108 | ipc/shm.c | shp->shm_perm.cgid = shp->shm_perm.gid = current->egid; |
shp | 109 | ipc/shm.c | shp->shm_perm.seq = shm_seq; |
shp | 110 | ipc/shm.c | shp->shm_segsz = size; |
shp | 111 | ipc/shm.c | shp->shm_cpid = current->pid; |
shp | 112 | ipc/shm.c | shp->attaches = NULL; |
shp | 113 | ipc/shm.c | shp->shm_lpid = shp->shm_nattch = 0; |
shp | 114 | ipc/shm.c | shp->shm_atime = shp->shm_dtime = 0; |
shp | 115 | ipc/shm.c | shp->shm_ctime = CURRENT_TIME; |
shp | 116 | ipc/shm.c | shp->shm_npages = numpages; |
shp | 120 | ipc/shm.c | shm_segs[id] = shp; |
shp | 129 | ipc/shm.c | struct shmid_ds *shp; |
shp | 143 | ipc/shm.c | shp = shm_segs[id]; |
shp | 144 | ipc/shm.c | if (shp->shm_perm.mode & SHM_DEST) |
shp | 146 | ipc/shm.c | if (size > shp->shm_segsz) |
shp | 148 | ipc/shm.c | if (ipcperms (&shp->shm_perm, shmflg)) |
shp | 150 | ipc/shm.c | return shp->shm_perm.seq*SHMMNI + id; |
shp | 159 | ipc/shm.c | struct shmid_ds *shp; |
shp | 163 | ipc/shm.c | shp = shm_segs[id]; |
shp | 164 | ipc/shm.c | if (shp == IPC_NOID || shp == IPC_UNUSED) { |
shp | 168 | ipc/shm.c | shp->shm_perm.seq++; /* for shmat */ |
shp | 169 | ipc/shm.c | numpages = shp->shm_npages; |
shp | 175 | ipc/shm.c | if (!shp->shm_pages) { |
shp | 180 | ipc/shm.c | if (!(page = shp->shm_pages[i])) |
shp | 190 | ipc/shm.c | kfree(shp->shm_pages); |
shp | 192 | ipc/shm.c | kfree(shp); |
shp | 198 | ipc/shm.c | struct shmid_ds *shp, tbuf; |
shp | 250 | ipc/shm.c | err = verify_area (VERIFY_WRITE, buf, sizeof (*shp)); |
shp | 255 | ipc/shm.c | shp = shm_segs[shmid]; |
shp | 256 | ipc/shm.c | if (shp == IPC_UNUSED || shp == IPC_NOID) |
shp | 258 | ipc/shm.c | if (ipcperms (&shp->shm_perm, S_IRUGO)) |
shp | 260 | ipc/shm.c | id = shmid + shp->shm_perm.seq * SHMMNI; |
shp | 261 | ipc/shm.c | memcpy_tofs (buf, shp, sizeof(*shp)); |
shp | 265 | ipc/shm.c | shp = shm_segs[id = shmid % SHMMNI]; |
shp | 266 | ipc/shm.c | if (shp == IPC_UNUSED || shp == IPC_NOID) |
shp | 268 | ipc/shm.c | ipcp = &shp->shm_perm; |
shp | 295 | ipc/shm.c | err = verify_area (VERIFY_WRITE, buf, sizeof (*shp)); |
shp | 298 | ipc/shm.c | memcpy_tofs (buf, shp, sizeof(*shp)); |
shp | 301 | ipc/shm.c | if (suser() || current->euid == shp->shm_perm.uid || |
shp | 302 | ipc/shm.c | current->euid == shp->shm_perm.cuid) { |
shp | 307 | ipc/shm.c | shp->shm_ctime = CURRENT_TIME; |
shp | 312 | ipc/shm.c | if (suser() || current->euid == shp->shm_perm.uid || |
shp | 313 | ipc/shm.c | current->euid == shp->shm_perm.cuid) { |
shp | 314 | ipc/shm.c | shp->shm_perm.mode |= SHM_DEST; |
shp | 315 | ipc/shm.c | if (shp->shm_nattch <= 0) |
shp | 430 | ipc/shm.c | struct shmid_ds *shp; |
shp | 445 | ipc/shm.c | shp = shm_segs[id = shmid % SHMMNI]; |
shp | 446 | ipc/shm.c | if (shp == IPC_UNUSED || shp == IPC_NOID) |
shp | 460 | ipc/shm.c | addr = (addr - shp->shm_segsz) & PAGE_MASK; |
shp | 467 | ipc/shm.c | if ((addr > current->mm->start_stack - 16384 - PAGE_SIZE*shp->shm_npages)) |
shp | 473 | ipc/shm.c | if (addr + shp->shm_segsz >= shmd->start && |
shp | 474 | ipc/shm.c | addr + shp->shm_segsz < shmd->end) |
shp | 478 | ipc/shm.c | if (ipcperms(&shp->shm_perm, shmflg & SHM_RDONLY ? S_IRUGO : S_IRUGO|S_IWUGO)) |
shp | 480 | ipc/shm.c | if (shp->shm_perm.seq != shmid / SHMMNI) |
shp | 486 | ipc/shm.c | if ((shp != shm_segs[id]) || (shp->shm_perm.seq != shmid / SHMMNI)) { |
shp | 493 | ipc/shm.c | shmd->end = addr + shp->shm_npages * PAGE_SIZE; |
shp | 501 | ipc/shm.c | shp->shm_nattch++; /* prevent destruction */ |
shp | 504 | ipc/shm.c | if (--shp->shm_nattch <= 0 && shp->shm_perm.mode & SHM_DEST) |
shp | 512 | ipc/shm.c | shmd->seg_next = shp->attaches; |
shp | 513 | ipc/shm.c | shp->attaches = shmd; |
shp | 514 | ipc/shm.c | shp->shm_lpid = current->pid; |
shp | 515 | ipc/shm.c | shp->shm_atime = CURRENT_TIME; |
shp | 530 | ipc/shm.c | struct shmid_ds *shp; |
shp | 534 | ipc/shm.c | shp = shm_segs[id]; |
shp | 536 | ipc/shm.c | for (shmdp = &shp->attaches; *shmdp; shmdp = &(*shmdp)->seg_next) |
shp | 544 | ipc/shm.c | do_munmap(shmd->start, shp->shm_segsz); |
shp | 546 | ipc/shm.c | shp->shm_lpid = current->pid; |
shp | 547 | ipc/shm.c | shp->shm_dtime = CURRENT_TIME; |
shp | 548 | ipc/shm.c | if (--shp->shm_nattch <= 0 && shp->shm_perm.mode & SHM_DEST) |
shp | 588 | ipc/shm.c | struct shmid_ds *shp; |
shp | 614 | ipc/shm.c | shp = shm_segs[id]; |
shp | 615 | ipc/shm.c | if (shp == IPC_UNUSED) { |
shp | 619 | ipc/shm.c | shmd->seg_next = shp->attaches; |
shp | 620 | ipc/shm.c | shp->attaches = shmd; |
shp | 621 | ipc/shm.c | shp->shm_nattch++; |
shp | 622 | ipc/shm.c | shp->shm_atime = CURRENT_TIME; |
shp | 623 | ipc/shm.c | shp->shm_lpid = current->pid; |
shp | 634 | ipc/shm.c | struct shmid_ds *shp; |
shp | 642 | ipc/shm.c | shp = shm_segs[id]; |
shp | 643 | ipc/shm.c | if (shp == IPC_UNUSED || shp == IPC_NOID) { |
shp | 648 | ipc/shm.c | if (idx >= shp->shm_npages) { |
shp | 653 | ipc/shm.c | if (!(shp->shm_pages[idx] & PAGE_PRESENT)) { |
shp | 658 | ipc/shm.c | if (shp->shm_pages[idx] & PAGE_PRESENT) { |
shp | 662 | ipc/shm.c | if (shp->shm_pages[idx]) { |
shp | 663 | ipc/shm.c | read_swap_page (shp->shm_pages[idx], (char *) page); |
shp | 664 | ipc/shm.c | if (shp->shm_pages[idx] & PAGE_PRESENT) { |
shp | 668 | ipc/shm.c | swap_free (shp->shm_pages[idx]); |
shp | 672 | ipc/shm.c | shp->shm_pages[idx] = page | (PAGE_SHARED | PAGE_DIRTY); |
shp | 678 | ipc/shm.c | page = shp->shm_pages[idx]; |
shp | 694 | ipc/shm.c | struct shmid_ds *shp; |
shp | 705 | ipc/shm.c | shp = shm_segs[swap_id]; |
shp | 706 | ipc/shm.c | if (shp == IPC_UNUSED || shp == IPC_NOID || shp->shm_perm.mode & SHM_LOCKED ) { |
shp | 716 | ipc/shm.c | if (idx >= shp->shm_npages) { |
shp | 723 | ipc/shm.c | page = shp->shm_pages[idx]; |
shp | 734 | ipc/shm.c | for (shmd = shp->attaches; shmd; shmd = shmd->seg_next) { |
shp | 771 | ipc/shm.c | shp->shm_pages[idx] = swap_nr; |