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));