tag | line | file | source code |
shp | 55 | ipc/shm.c | struct shmid_ds *shp; |
shp | 58 | ipc/shm.c | while ((shp = shm_segs[id]) == IPC_NOID) |
shp | 60 | ipc/shm.c | if (shp == IPC_UNUSED) |
shp | 62 | ipc/shm.c | if (key == shp->shm_perm.key) |
shp | 73 | ipc/shm.c | struct shmid_ds *shp; |
shp | 89 | ipc/shm.c | shp = (struct shmid_ds *) kmalloc (sizeof (*shp), GFP_KERNEL); |
shp | 90 | ipc/shm.c | if (!shp) { |
shp | 97 | ipc/shm.c | shp->shm_pages = (ulong *) kmalloc (numpages*sizeof(ulong),GFP_KERNEL); |
shp | 98 | ipc/shm.c | if (!shp->shm_pages) { |
shp | 102 | ipc/shm.c | kfree(shp); |
shp | 106 | ipc/shm.c | for (i = 0; i < numpages; shp->shm_pages[i++] = 0); |
shp | 108 | ipc/shm.c | shp->shm_perm.key = key; |
shp | 109 | ipc/shm.c | shp->shm_perm.mode = (shmflg & S_IRWXUGO); |
shp | 110 | ipc/shm.c | shp->shm_perm.cuid = shp->shm_perm.uid = current->euid; |
shp | 111 | ipc/shm.c | shp->shm_perm.cgid = shp->shm_perm.gid = current->egid; |
shp | 112 | ipc/shm.c | shp->shm_perm.seq = shm_seq; |
shp | 113 | ipc/shm.c | shp->shm_segsz = size; |
shp | 114 | ipc/shm.c | shp->shm_cpid = current->pid; |
shp | 115 | ipc/shm.c | shp->attaches = NULL; |
shp | 116 | ipc/shm.c | shp->shm_lpid = shp->shm_nattch = 0; |
shp | 117 | ipc/shm.c | shp->shm_atime = shp->shm_dtime = 0; |
shp | 118 | ipc/shm.c | shp->shm_ctime = CURRENT_TIME; |
shp | 119 | ipc/shm.c | shp->shm_npages = numpages; |
shp | 123 | ipc/shm.c | shm_segs[id] = shp; |
shp | 127 | ipc/shm.c | return (unsigned int) shp->shm_perm.seq * SHMMNI + id; |
shp | 132 | ipc/shm.c | struct shmid_ds *shp; |
shp | 146 | ipc/shm.c | shp = shm_segs[id]; |
shp | 147 | ipc/shm.c | if (shp->shm_perm.mode & SHM_DEST) |
shp | 149 | ipc/shm.c | if (size > shp->shm_segsz) |
shp | 151 | ipc/shm.c | if (ipcperms (&shp->shm_perm, shmflg)) |
shp | 153 | ipc/shm.c | return (unsigned int) shp->shm_perm.seq * SHMMNI + id; |
shp | 162 | ipc/shm.c | struct shmid_ds *shp; |
shp | 166 | ipc/shm.c | shp = shm_segs[id]; |
shp | 167 | ipc/shm.c | if (shp == IPC_NOID || shp == IPC_UNUSED) { |
shp | 171 | ipc/shm.c | shp->shm_perm.seq++; /* for shmat */ |
shp | 177 | ipc/shm.c | if (!shp->shm_pages) { |
shp | 181 | ipc/shm.c | numpages = shp->shm_npages; |
shp | 183 | ipc/shm.c | if (!(page = shp->shm_pages[i])) |
shp | 193 | ipc/shm.c | kfree(shp->shm_pages); |
shp | 195 | ipc/shm.c | kfree(shp); |
shp | 202 | ipc/shm.c | struct shmid_ds *shp; |
shp | 259 | ipc/shm.c | shp = shm_segs[shmid]; |
shp | 260 | ipc/shm.c | if (shp == IPC_UNUSED || shp == IPC_NOID) |
shp | 262 | ipc/shm.c | if (ipcperms (&shp->shm_perm, S_IRUGO)) |
shp | 264 | ipc/shm.c | id = (unsigned int) shp->shm_perm.seq * SHMMNI + shmid; |
shp | 265 | ipc/shm.c | tbuf.shm_perm = shp->shm_perm; |
shp | 266 | ipc/shm.c | tbuf.shm_segsz = shp->shm_segsz; |
shp | 267 | ipc/shm.c | tbuf.shm_atime = shp->shm_atime; |
shp | 268 | ipc/shm.c | tbuf.shm_dtime = shp->shm_dtime; |
shp | 269 | ipc/shm.c | tbuf.shm_ctime = shp->shm_ctime; |
shp | 270 | ipc/shm.c | tbuf.shm_cpid = shp->shm_cpid; |
shp | 271 | ipc/shm.c | tbuf.shm_lpid = shp->shm_lpid; |
shp | 272 | ipc/shm.c | tbuf.shm_nattch = shp->shm_nattch; |
shp | 277 | ipc/shm.c | shp = shm_segs[id = (unsigned int) shmid % SHMMNI]; |
shp | 278 | ipc/shm.c | if (shp == IPC_UNUSED || shp == IPC_NOID) |
shp | 280 | ipc/shm.c | if (shp->shm_perm.seq != (unsigned int) shmid / SHMMNI) |
shp | 282 | ipc/shm.c | ipcp = &shp->shm_perm; |
shp | 310 | ipc/shm.c | tbuf.shm_perm = shp->shm_perm; |
shp | 311 | ipc/shm.c | tbuf.shm_segsz = shp->shm_segsz; |
shp | 312 | ipc/shm.c | tbuf.shm_atime = shp->shm_atime; |
shp | 313 | ipc/shm.c | tbuf.shm_dtime = shp->shm_dtime; |
shp | 314 | ipc/shm.c | tbuf.shm_ctime = shp->shm_ctime; |
shp | 315 | ipc/shm.c | tbuf.shm_cpid = shp->shm_cpid; |
shp | 316 | ipc/shm.c | tbuf.shm_lpid = shp->shm_lpid; |
shp | 317 | ipc/shm.c | tbuf.shm_nattch = shp->shm_nattch; |
shp | 321 | ipc/shm.c | if (suser() || current->euid == shp->shm_perm.uid || |
shp | 322 | ipc/shm.c | current->euid == shp->shm_perm.cuid) { |
shp | 327 | ipc/shm.c | shp->shm_ctime = CURRENT_TIME; |
shp | 332 | ipc/shm.c | if (suser() || current->euid == shp->shm_perm.uid || |
shp | 333 | ipc/shm.c | current->euid == shp->shm_perm.cuid) { |
shp | 334 | ipc/shm.c | shp->shm_perm.mode |= SHM_DEST; |
shp | 335 | ipc/shm.c | if (shp->shm_nattch <= 0) |
shp | 446 | ipc/shm.c | struct shmid_ds *shp; |
shp | 457 | ipc/shm.c | shp = shm_segs[id = (unsigned int) shmid % SHMMNI]; |
shp | 458 | ipc/shm.c | if (shp == IPC_UNUSED || shp == IPC_NOID) { |
shp | 466 | ipc/shm.c | if (!(addr = get_unmapped_area(shp->shm_segsz))) |
shp | 474 | ipc/shm.c | if ((addr > current->mm->start_stack - 16384 - PAGE_SIZE*shp->shm_npages)) { |
shp | 480 | ipc/shm.c | if (!(addr >= shmd->vm_end || addr + shp->shm_segsz <= shmd->vm_start)) { |
shp | 486 | ipc/shm.c | if (ipcperms(&shp->shm_perm, shmflg & SHM_RDONLY ? S_IRUGO : S_IRUGO|S_IWUGO)) |
shp | 488 | ipc/shm.c | if (shp->shm_perm.seq != (unsigned int) shmid / SHMMNI) |
shp | 494 | ipc/shm.c | if ((shp != shm_segs[id]) || (shp->shm_perm.seq != (unsigned int) shmid / SHMMNI)) { |
shp | 502 | ipc/shm.c | shmd->vm_end = addr + shp->shm_npages * PAGE_SIZE; |
shp | 513 | ipc/shm.c | shp->shm_nattch++; /* prevent destruction */ |
shp | 515 | ipc/shm.c | if (--shp->shm_nattch <= 0 && shp->shm_perm.mode & SHM_DEST) |
shp | 521 | ipc/shm.c | shmd->vm_next_share = shp->attaches; |
shp | 522 | ipc/shm.c | shp->attaches = shmd; |
shp | 523 | ipc/shm.c | shp->shm_lpid = current->pid; |
shp | 524 | ipc/shm.c | shp->shm_atime = CURRENT_TIME; |
shp | 534 | ipc/shm.c | struct shmid_ds *shp; |
shp | 537 | ipc/shm.c | shp = shm_segs[id]; |
shp | 538 | ipc/shm.c | if (shp == IPC_UNUSED) { |
shp | 542 | ipc/shm.c | shmd->vm_next_share = shp->attaches; |
shp | 543 | ipc/shm.c | shp->attaches = shmd; |
shp | 544 | ipc/shm.c | shp->shm_nattch++; |
shp | 545 | ipc/shm.c | shp->shm_atime = CURRENT_TIME; |
shp | 546 | ipc/shm.c | shp->shm_lpid = current->pid; |
shp | 558 | ipc/shm.c | struct shmid_ds *shp; |
shp | 565 | ipc/shm.c | shp = shm_segs[id]; |
shp | 566 | ipc/shm.c | for (shmdp = &shp->attaches; *shmdp; shmdp = &(*shmdp)->vm_next_share) |
shp | 581 | ipc/shm.c | shp->shm_lpid = current->pid; |
shp | 582 | ipc/shm.c | shp->shm_dtime = CURRENT_TIME; |
shp | 583 | ipc/shm.c | if (--shp->shm_nattch <= 0 && shp->shm_perm.mode & SHM_DEST) |
shp | 610 | ipc/shm.c | struct shmid_ds *shp; |
shp | 618 | ipc/shm.c | shp = shm_segs[id]; |
shp | 619 | ipc/shm.c | if (shp == IPC_UNUSED || shp == IPC_NOID) { |
shp | 624 | ipc/shm.c | if (idx >= shp->shm_npages) { |
shp | 629 | ipc/shm.c | if (!(shp->shm_pages[idx] & PAGE_PRESENT)) { |
shp | 634 | ipc/shm.c | if (shp->shm_pages[idx] & PAGE_PRESENT) { |
shp | 638 | ipc/shm.c | if (shp->shm_pages[idx]) { |
shp | 639 | ipc/shm.c | read_swap_page (shp->shm_pages[idx], (char *) page); |
shp | 640 | ipc/shm.c | if (shp->shm_pages[idx] & PAGE_PRESENT) { |
shp | 644 | ipc/shm.c | swap_free (shp->shm_pages[idx]); |
shp | 648 | ipc/shm.c | shp->shm_pages[idx] = page | (PAGE_SHARED | PAGE_DIRTY); |
shp | 654 | ipc/shm.c | page = shp->shm_pages[idx]; |
shp | 670 | ipc/shm.c | struct shmid_ds *shp; |
shp | 681 | ipc/shm.c | shp = shm_segs[swap_id]; |
shp | 682 | ipc/shm.c | if (shp == IPC_UNUSED || shp == IPC_NOID || shp->shm_perm.mode & SHM_LOCKED ) { |
shp | 692 | ipc/shm.c | if (idx >= shp->shm_npages) { |
shp | 699 | ipc/shm.c | page = shp->shm_pages[idx]; |
shp | 710 | ipc/shm.c | for (shmd = shp->attaches; shmd; shmd = shmd->vm_next_share) { |
shp | 745 | ipc/shm.c | shp->shm_pages[idx] = swap_nr; |