# This is a BitKeeper generated patch for the following project: # Project Name: Linux kernel tree # This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas: # ChangeSet 1.640 -> 1.641 # ipc/sem.c 1.9 -> 1.10 # ipc/shm.c 1.11 -> 1.12 # include/linux/shm.h 1.2 -> 1.3 # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 02/07/15 greg@kroah.com 1.641 # LSM: move struct shmid_kernel out of ipc/shm.c to include/linux/shm.h # # Also move where we set sma->sem_perm.mode and .key to before ipc_addid() gets called. # -------------------------------------------- # diff -Nru a/include/linux/shm.h b/include/linux/shm.h --- a/include/linux/shm.h Mon Jul 15 16:50:02 2002 +++ b/include/linux/shm.h Mon Jul 15 16:50:02 2002 @@ -71,6 +71,19 @@ }; #ifdef __KERNEL__ +struct shmid_kernel /* private to the kernel */ +{ + struct kern_ipc_perm shm_perm; + struct file * shm_file; + int id; + unsigned long shm_nattch; + unsigned long shm_segsz; + time_t shm_atim; + time_t shm_dtim; + time_t shm_ctim; + pid_t shm_cprid; + pid_t shm_lprid; +}; /* shm_mode upper byte flags */ #define SHM_DEST 01000 /* segment will be destroyed on last detach */ diff -Nru a/ipc/sem.c b/ipc/sem.c --- a/ipc/sem.c Mon Jul 15 16:50:02 2002 +++ b/ipc/sem.c Mon Jul 15 16:50:02 2002 @@ -129,15 +129,16 @@ return -ENOMEM; } memset (sma, 0, size); + + sma->sem_perm.mode = (semflg & S_IRWXUGO); + sma->sem_perm.key = key; + id = ipc_addid(&sem_ids, &sma->sem_perm, sc_semmni); if(id == -1) { ipc_free(sma, size); return -ENOSPC; } used_sems += nsems; - - sma->sem_perm.mode = (semflg & S_IRWXUGO); - sma->sem_perm.key = key; sma->sem_base = (struct sem *) &sma[1]; /* sma->sem_pending = NULL; */ diff -Nru a/ipc/shm.c b/ipc/shm.c --- a/ipc/shm.c Mon Jul 15 16:50:02 2002 +++ b/ipc/shm.c Mon Jul 15 16:50:02 2002 @@ -28,20 +28,6 @@ #include "util.h" -struct shmid_kernel /* private to the kernel */ -{ - struct kern_ipc_perm shm_perm; - struct file * shm_file; - int id; - unsigned long shm_nattch; - unsigned long shm_segsz; - time_t shm_atim; - time_t shm_dtim; - time_t shm_ctim; - pid_t shm_cprid; - pid_t shm_lprid; -}; - #define shm_flags shm_perm.mode static struct file_operations shm_file_operations; @@ -193,6 +179,10 @@ shp = (struct shmid_kernel *) kmalloc (sizeof (*shp), GFP_USER); if (!shp) return -ENOMEM; + + shp->shm_perm.key = key; + shp->shm_flags = (shmflg & S_IRWXUGO); + sprintf (name, "SYSV%08x", key); file = shmem_file_setup(name, size); error = PTR_ERR(file); @@ -203,8 +193,7 @@ id = shm_addid(shp); if(id == -1) goto no_id; - shp->shm_perm.key = key; - shp->shm_flags = (shmflg & S_IRWXUGO); + shp->shm_cprid = current->pid; shp->shm_lprid = 0; shp->shm_atim = shp->shm_dtim = 0;