From daf90caf6ff25de4e24decd05a4e46b84eae1a54 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sun, 14 Jul 2002 22:51:26 -0700 Subject: LSM: move the struct msg_msg and struct msg_queue definitions out of the msg.c file to the msg.h file Also move where the msg->q_perm.mode and .key values get set to before ipc_addid() gets called to make placing a hook there easier. --- include/linux/msg.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'include/linux') diff --git a/include/linux/msg.h b/include/linux/msg.h index 4dfca8d4952c..4b64aebf312e 100644 --- a/include/linux/msg.h +++ b/include/linux/msg.h @@ -63,6 +63,35 @@ struct msginfo { #ifdef __KERNEL__ +/* one msg_msg structure for each message */ +struct msg_msg { + struct list_head m_list; + long m_type; + int m_ts; /* message text size */ + struct msg_msgseg* next; + /* the actual message follows immediately */ +}; + +#define DATALEN_MSG (PAGE_SIZE-sizeof(struct msg_msg)) +#define DATALEN_SEG (PAGE_SIZE-sizeof(struct msg_msgseg)) + +/* one msq_queue structure for each present queue on the system */ +struct msg_queue { + struct kern_ipc_perm q_perm; + time_t q_stime; /* last msgsnd time */ + time_t q_rtime; /* last msgrcv time */ + time_t q_ctime; /* last change time */ + unsigned long q_cbytes; /* current number of bytes on queue */ + unsigned long q_qnum; /* number of messages in queue */ + unsigned long q_qbytes; /* max number of bytes on queue */ + pid_t q_lspid; /* pid of last msgsnd */ + pid_t q_lrpid; /* last receive pid */ + + struct list_head q_messages; + struct list_head q_receivers; + struct list_head q_senders; +}; + asmlinkage long sys_msgget (key_t key, int msgflg); asmlinkage long sys_msgsnd (int msqid, struct msgbuf *msgp, size_t msgsz, int msgflg); asmlinkage long sys_msgrcv (int msqid, struct msgbuf *msgp, size_t msgsz, long msgtyp, int msgflg); -- cgit v1.2.3 From 8fcdd673ba16b7bfd62f2ee88ec9fa221575b4c3 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sun, 14 Jul 2002 22:53:35 -0700 Subject: 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. --- include/linux/shm.h | 13 +++++++++++++ ipc/sem.c | 7 ++++--- ipc/shm.c | 21 +++++---------------- 3 files changed, 22 insertions(+), 19 deletions(-) (limited to 'include/linux') 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; -- cgit v1.2.3