Module Name:    src
Committed By:   tteras
Date:           Mon Apr 20 13:24:36 UTC 2009

Modified Files:
        src/crypto/dist/ipsec-tools/src/racoon: isakmp.c isakmp.h isakmp_var.h

Log Message:
Fix a memory leak in certificate request generation.


To generate a diff of this commit:
cvs rdiff -u -r1.53 -r1.54 src/crypto/dist/ipsec-tools/src/racoon/isakmp.c
cvs rdiff -u -r1.5 -r1.6 src/crypto/dist/ipsec-tools/src/racoon/isakmp.h
cvs rdiff -u -r1.14 -r1.15 \
    src/crypto/dist/ipsec-tools/src/racoon/isakmp_var.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/crypto/dist/ipsec-tools/src/racoon/isakmp.c
diff -u src/crypto/dist/ipsec-tools/src/racoon/isakmp.c:1.53 src/crypto/dist/ipsec-tools/src/racoon/isakmp.c:1.54
--- src/crypto/dist/ipsec-tools/src/racoon/isakmp.c:1.53	Thu Mar 12 23:05:27 2009
+++ src/crypto/dist/ipsec-tools/src/racoon/isakmp.c	Mon Apr 20 13:24:36 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: isakmp.c,v 1.53 2009/03/12 23:05:27 he Exp $	*/
+/*	$NetBSD: isakmp.c,v 1.54 2009/04/20 13:24:36 tteras Exp $	*/
 
 /* Id: isakmp.c,v 1.74 2006/05/07 21:32:59 manubsd Exp */
 
@@ -3029,7 +3029,8 @@
 }
 
 struct payload_list *
-isakmp_plist_append (struct payload_list *plist, vchar_t *payload, int payload_type)
+isakmp_plist_append_full (struct payload_list *plist, vchar_t *payload,
+			  u_int8_t payload_type, u_int8_t free_payload)
 {
 	if (! plist) {
 		plist = racoon_malloc (sizeof (struct payload_list));
@@ -3044,6 +3045,7 @@
 	plist->next = NULL;
 	plist->payload = payload;
 	plist->payload_type = payload_type;
+	plist->free_payload = free_payload;
 
 	return plist;
 }
@@ -3084,6 +3086,8 @@
 		p = set_isakmp_payload (p, ptr->payload, ptr->next ? ptr->next->payload_type : ISAKMP_NPTYPE_NONE);
 		first = ptr;
 		ptr = ptr->next;
+		if (first->free_payload)
+			vfree(first->payload);
 		racoon_free (first);
 		/* ptr->prev = NULL; first = NULL; ... omitted.  */
 		n++;

Index: src/crypto/dist/ipsec-tools/src/racoon/isakmp.h
diff -u src/crypto/dist/ipsec-tools/src/racoon/isakmp.h:1.5 src/crypto/dist/ipsec-tools/src/racoon/isakmp.h:1.6
--- src/crypto/dist/ipsec-tools/src/racoon/isakmp.h:1.5	Thu Mar 12 10:57:26 2009
+++ src/crypto/dist/ipsec-tools/src/racoon/isakmp.h	Mon Apr 20 13:24:36 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: isakmp.h,v 1.5 2009/03/12 10:57:26 tteras Exp $	*/
+/*	$NetBSD: isakmp.h,v 1.6 2009/04/20 13:24:36 tteras Exp $	*/
 
 /* Id: isakmp.h,v 1.11 2005/04/25 22:19:39 manubsd Exp */
 
@@ -379,7 +379,8 @@
 struct payload_list {
 	struct payload_list	*next, *prev;
 	vchar_t			*payload;
-	int			payload_type;
+	u_int8_t		payload_type;
+	u_int8_t		free_payload;
 };
 
 

Index: src/crypto/dist/ipsec-tools/src/racoon/isakmp_var.h
diff -u src/crypto/dist/ipsec-tools/src/racoon/isakmp_var.h:1.14 src/crypto/dist/ipsec-tools/src/racoon/isakmp_var.h:1.15
--- src/crypto/dist/ipsec-tools/src/racoon/isakmp_var.h:1.14	Thu Mar 12 10:57:26 2009
+++ src/crypto/dist/ipsec-tools/src/racoon/isakmp_var.h	Mon Apr 20 13:24:36 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: isakmp_var.h,v 1.14 2009/03/12 10:57:26 tteras Exp $	*/
+/*	$NetBSD: isakmp_var.h,v 1.15 2009/04/20 13:24:36 tteras Exp $	*/
 
 /* Id: isakmp_var.h,v 1.12 2005/05/07 14:45:31 manubsd Exp */
 
@@ -106,8 +106,19 @@
 extern caddr_t set_isakmp_header2 __P((vchar_t *, struct ph2handle *, int));
 extern caddr_t set_isakmp_payload __P((caddr_t, vchar_t *, int));
 
-extern struct payload_list *isakmp_plist_append __P((struct payload_list *plist, 
-	vchar_t *payload, int payload_type));
+extern struct payload_list *isakmp_plist_append_full __P((
+	struct payload_list *plist, vchar_t *payload,
+	u_int8_t payload_type, u_int8_t free));
+
+static inline struct payload_list *isakmp_plist_append(plist, payload, payload_type)
+	struct payload_list *plist;
+	vchar_t *payload;
+	u_int8_t payload_type;
+{
+	return isakmp_plist_append_full(plist, payload, payload_type, 0);
+}
+
+
 extern vchar_t *isakmp_plist_set_all __P((struct payload_list **plist,
 	struct ph1handle *iph1));
 

Reply via email to