summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <greg@kroah.com>2002-07-14 22:53:35 -0700
committerGreg Kroah-Hartman <greg@kroah.com>2002-07-14 22:53:35 -0700
commit8fcdd673ba16b7bfd62f2ee88ec9fa221575b4c3 (patch)
treefe924c7258b5f8af63a0fd1259729254c385a518
parentdaf90caf6ff25de4e24decd05a4e46b84eae1a54 (diff)
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.
-rw-r--r--include/linux/shm.h13
-rw-r--r--ipc/sem.c7
-rw-r--r--ipc/shm.c21
3 files changed, 22 insertions, 19 deletions
diff --git a/include/linux/shm.h b/include/linux/shm.h
index be3351619c2e..be7d433725ca 100644
--- a/include/linux/shm.h
+++ b/include/linux/shm.h
@@ -71,6 +71,19 @@ struct shm_info {
};
#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 --git a/ipc/sem.c b/ipc/sem.c
index 4ffb1c881d52..920734454994 100644
--- a/ipc/sem.c
+++ b/ipc/sem.c
@@ -129,6 +129,10 @@ static int newary (key_t key, int nsems, int semflg)
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);
@@ -136,9 +140,6 @@ static int newary (key_t key, int nsems, int semflg)
}
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; */
sma->sem_pending_last = &sma->sem_pending;
diff --git a/ipc/shm.c b/ipc/shm.c
index 650c93e47133..0d886d197f07 100644
--- a/ipc/shm.c
+++ b/ipc/shm.c
@@ -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 @@ static int newseg (key_t key, int shmflg, size_t size)
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 @@ static int newseg (key_t key, int shmflg, size_t size)
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;