aboutsummaryrefslogtreecommitdiffstats
path: root/ipc/shm.c
diff options
context:
space:
mode:
authorPavel Emelyanov <xemul@openvz.org>2007-10-19 02:40:14 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-19 14:53:40 -0400
commitb488893a390edfe027bae7a46e9af8083e740668 (patch)
treec469a7f99ad01005a73011c029eb5e5d15454559 /ipc/shm.c
parent3eb07c8c8adb6f0572baba844ba2d9e501654316 (diff)
pid namespaces: changes to show virtual ids to user
This is the largest patch in the set. Make all (I hope) the places where the pid is shown to or get from user operate on the virtual pids. The idea is: - all in-kernel data structures must store either struct pid itself or the pid's global nr, obtained with pid_nr() call; - when seeking the task from kernel code with the stored id one should use find_task_by_pid() call that works with global pids; - when showing pid's numerical value to the user the virtual one should be used, but however when one shows task's pid outside this task's namespace the global one is to be used; - when getting the pid from userspace one need to consider this as the virtual one and use appropriate task/pid-searching functions. [akpm@linux-foundation.org: build fix] [akpm@linux-foundation.org: nuther build fix] [akpm@linux-foundation.org: yet nuther build fix] [akpm@linux-foundation.org: remove unneeded casts] Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Alexey Dobriyan <adobriyan@openvz.org> Cc: Sukadev Bhattiprolu <sukadev@us.ibm.com> Cc: Oleg Nesterov <oleg@tv-sign.ru> Cc: Paul Menage <menage@google.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'ipc/shm.c')
-rw-r--r--ipc/shm.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/ipc/shm.c b/ipc/shm.c
index 5fc5cf50cf1b..b9d272900a1e 100644
--- a/ipc/shm.c
+++ b/ipc/shm.c
@@ -168,7 +168,7 @@ static void shm_open(struct vm_area_struct *vma)
168 shp = shm_lock(sfd->ns, sfd->id); 168 shp = shm_lock(sfd->ns, sfd->id);
169 BUG_ON(!shp); 169 BUG_ON(!shp);
170 shp->shm_atim = get_seconds(); 170 shp->shm_atim = get_seconds();
171 shp->shm_lprid = current->tgid; 171 shp->shm_lprid = task_tgid_vnr(current);
172 shp->shm_nattch++; 172 shp->shm_nattch++;
173 shm_unlock(shp); 173 shm_unlock(shp);
174} 174}
@@ -213,7 +213,7 @@ static void shm_close(struct vm_area_struct *vma)
213 /* remove from the list of attaches of the shm segment */ 213 /* remove from the list of attaches of the shm segment */
214 shp = shm_lock(ns, sfd->id); 214 shp = shm_lock(ns, sfd->id);
215 BUG_ON(!shp); 215 BUG_ON(!shp);
216 shp->shm_lprid = current->tgid; 216 shp->shm_lprid = task_tgid_vnr(current);
217 shp->shm_dtim = get_seconds(); 217 shp->shm_dtim = get_seconds();
218 shp->shm_nattch--; 218 shp->shm_nattch--;
219 if(shp->shm_nattch == 0 && 219 if(shp->shm_nattch == 0 &&
@@ -392,7 +392,7 @@ static int newseg (struct ipc_namespace *ns, key_t key, int shmflg, size_t size)
392 if(id == -1) 392 if(id == -1)
393 goto no_id; 393 goto no_id;
394 394
395 shp->shm_cprid = current->tgid; 395 shp->shm_cprid = task_tgid_vnr(current);
396 shp->shm_lprid = 0; 396 shp->shm_lprid = 0;
397 shp->shm_atim = shp->shm_dtim = 0; 397 shp->shm_atim = shp->shm_dtim = 0;
398 shp->shm_ctim = get_seconds(); 398 shp->shm_ctim = get_seconds();