patch-2.4.5 linux/ipc/shm.c
Next file: linux/kernel/context.c
Previous file: linux/init/main.c
Back to the patch index
Back to the overall index
- Lines: 29
- Date:
Sat May 19 17:47:55 2001
- Orig file:
v2.4.4/linux/ipc/shm.c
- Orig date:
Mon Mar 19 12:35:08 2001
diff -u --recursive --new-file v2.4.4/linux/ipc/shm.c linux/ipc/shm.c
@@ -497,14 +497,21 @@
if (shp == NULL)
goto out_up;
err = shm_checkid(shp, shmid);
- if (err == 0) {
- if (shp->shm_nattch){
- shp->shm_flags |= SHM_DEST;
- /* Do not find it any more */
- shp->shm_perm.key = IPC_PRIVATE;
- } else
- shm_destroy (shp);
+ if(err)
+ goto out_unlock_up;
+ if (current->euid != shp->shm_perm.uid &&
+ current->euid != shp->shm_perm.cuid &&
+ !capable(CAP_SYS_ADMIN)) {
+ err=-EPERM;
+ goto out_unlock_up;
}
+ if (shp->shm_nattch){
+ shp->shm_flags |= SHM_DEST;
+ /* Do not find it any more */
+ shp->shm_perm.key = IPC_PRIVATE;
+ } else
+ shm_destroy (shp);
+
/* Unlock */
shm_unlock(shmid);
up(&shm_ids.sem);
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)