[SSI] openssi/kernel/cluster/ssi/ipc ipcmsg_svr.c, 1.9, 1.10 ipcsem_svr.c, 1.9, 1.10 ipcshm_svr.c, 1.19, 1.20

Roger Tsang <[email protected]> Tue, 02 Feb 2010 05:19:32 +0000
Newsgroups gmane.linux.cluster.ssic.cvs
Message-ID <[email protected]>
Update of /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/ipc
In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv20244/cluster/ssi/ipc

Modified Files:
      Tag: OPENSSI-FC
	ipcmsg_svr.c ipcsem_svr.c ipcshm_svr.c 
Log Message:
- Fix sysvipc_msg_read_proc() leaking msg_queue struct when
  ssi_msg_get_msg_queue() fails.
- Fix sysvipc_sem_read_proc() leaking sem_array struct when
  ssi_sem_get_sem_array() fails.
- Fix sysvipc_shm_read_proc() leaking shmid_kernel struct when
  ssi_shm_get_shmid_kernel() fails.
- Move kernel struct to buffer type casting into ssi_shm_get_shmid_kernel(),
  ssi_sem_get_sem_array(), and ssi_msg_get_msg_queue().

 cluster/ssi/ipc/ipcmsg_svr.c  |   14 +++++++++-----
 cluster/ssi/ipc/ipcsem_svr.c  |   14 +++++++++-----
 cluster/ssi/ipc/ipcshm_svr.c  |   15 ++++++++++-----
 include/cluster/ssi/ipc/msg.h |    2 +-
 include/cluster/ssi/ipc/sem.h |    2 +-
 include/cluster/ssi/ipc/shm.h |    2 +-
 ipc/msg.c                     |   12 ++++++++----
 ipc/sem.c                     |   12 ++++++++----
 ipc/shm.c                     |   14 ++++++++++----
 9 files changed, 57 insertions(+), 30 deletions(-)


Index: ipcmsg_svr.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/ipc/ipcmsg_svr.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- ipcmsg_svr.c	17 Jan 2010 11:57:05 -0000	1.9
+++ ipcmsg_svr.c	2 Feb 2010 05:19:30 -0000	1.10
@@ -91,18 +91,22 @@
 	return 0;
 }
 
-int ssi_msg_get_msg_queue(clusternode_t node_num, int msgid, char **msq)
+int
+ssi_msg_get_msg_queue(
+	clusternode_t node_num,
+	int msgid,
+	struct msg_queue *msq)
 {
 	ssi_procstate_t pstate;
-	int status = 0;
-	int rval, len=0;
+	int status, rval, len = sizeof(*msq);
 
 	ssi_procstate_get(&pstate);
 
-	len = sizeof(struct msg_queue);
-	status = RIPC_MSG_GET_MSG_QUEUE(node_num, &rval, msgid, &pstate, msq, &len);
+	status = RIPC_MSG_GET_MSG_QUEUE(node_num, &rval, msgid, &pstate,
+					(char **)&msq, &len);
 	if (!status)
 		status = rval;
+
 	return status;
 }
 

Index: ipcshm_svr.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/ipc/ipcshm_svr.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- ipcshm_svr.c	17 Jan 2010 11:57:05 -0000	1.19
+++ ipcshm_svr.c	2 Feb 2010 05:19:30 -0000	1.20
@@ -98,16 +98,21 @@
 	return 0;
 }
 
-int ssi_shm_get_shmid_kernel(clusternode_t node_num, int shmid, char **shmidk, int *segsize, int *cprid)
+int
+ssi_shm_get_shmid_kernel(
+	clusternode_t node_num,
+	int shmid,
+	struct shmid_kernel *shmidk,
+	int *segsize,
+	int *cprid)
 {
 	ssi_procstate_t pstate;
-	int status = 0;
-	int rval, len=0;
+	int status, rval, len = sizeof(*shmidk);
 
 	ssi_procstate_get(&pstate);
 
-	len = sizeof(struct shmid_kernel);
-	status = RIPC_SHM_GET_SHMID_KERNEL(node_num, &rval, shmid, &pstate, shmidk, &len, segsize, cprid);
+	status = RIPC_SHM_GET_SHMID_KERNEL(node_num, &rval, shmid, &pstate,
+					(char **)&shmidk, &len, segsize, cprid);
 	if (!status)
 		status = rval;
 

Index: ipcsem_svr.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/ipc/ipcsem_svr.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- ipcsem_svr.c	17 Jan 2010 11:57:05 -0000	1.9
+++ ipcsem_svr.c	2 Feb 2010 05:19:30 -0000	1.10
@@ -80,18 +80,22 @@
 	return 0;
 }
 
-int ssi_sem_get_sem_array(clusternode_t node_num, int semid, char **sema)
+int
+ssi_sem_get_sem_array(
+	clusternode_t node_num,
+	int semid,
+	struct sem_array *sema)
 {
 	ssi_procstate_t pstate;
-	int status = 0;
-	int rval, len=0;
+	int status, rval, len = sizeof(*sema);
 
 	ssi_procstate_get(&pstate);
 
-	len = sizeof(struct sem_array);
-	status = RIPC_SEM_GET_SEM_ARRAY(node_num, &rval, semid, &pstate, sema, &len);
+	status = RIPC_SEM_GET_SEM_ARRAY(node_num, &rval, semid, &pstate,
+					(char **)&sema, &len);
 	if (!status)
 		status = rval;
+
 	return status;
 }
 


------------------------------------------------------------------------------
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com