[SSI] openssi/kernel/cluster/ssi/ipc ipcmsg_svr.c,1.12,1.13

Roger Tsang <[email protected]> Sat, 03 Apr 2010 22:00:39 +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-serv15224/kernel/cluster/ssi/ipc

Modified Files:
      Tag: OPENSSI-FC
	ipcmsg_svr.c 
Log Message:
- Fix ripc_msgsnd() multiple struct msg_msgseg leak on ssi_msgnd() error.
- Fix double kfree() due to ssi_msgsnd() did not NULL "msgp" pointer to struct msg_msg when message is queued. Bug introduced in OPENSSI-FC-1-9-6-PRE32.

 cluster/ssi/ipc/ipcmsg_svr.c |   13 ++++++++++++-
 ipc/msg.c                    |    4 ++++
 2 files changed, 16 insertions(+), 1 deletion(-)


Index: ipcmsg_svr.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/ipc/ipcmsg_svr.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- ipcmsg_svr.c	3 Apr 2010 19:34:43 -0000	1.12
+++ ipcmsg_svr.c	3 Apr 2010 22:00:36 -0000	1.13
@@ -42,11 +42,17 @@
 #include <cluster/gen/ics_ipc_macros_gen.h>
 #include <cluster/gen/ics_ipc_protos_gen.h>
 
+/* ipc/msg.c */
+#ifdef SSI_NOTUSED
 extern int ssi_msg_get_check (ipc_obj_t *objp, long size);
+#endif
 extern int ssi_msgsnd (int, struct msg_msg **, size_t, int);
 extern int ssi_msgrcv (int, struct msgbuf *, size_t, long, int, char *, long *);
 extern long sys_msgctl(int, int, struct msqid_ds *);
 
+/* ipc/msgutil.c */
+extern void free_msg(struct msg_msg *);
+
 extern clusternode_t	name_server_node;
 
 extern struct ipc_ids   msg_ids;
@@ -156,6 +162,9 @@
 #ifdef TEST_IPC
 	printk("size = %d, segsize = %d\n",size,segsize);
 #endif
+	/*
+	 * load_msg() for kernel-space
+	 */
 	currptr = msgsegs;
 	*rval = 0;
 	if (segsize > 0) {
@@ -198,9 +207,11 @@
 		segsize -= len;
 		currptr += len;
 	}
+
 	*rval = ssi_msgsnd(msqid, &msgp, msgp->m_ts, flags);
 	/* msgp will be NULL if message is queued. */
-	kfree(msgp);
+	if (msgp)
+		free_msg(msgp);
 	return *rval;
 }
 


------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev