[1558] in Kerberos-V5-bugs

home help back first fref pref prev next nref lref last post

krb5_mk_safe(), krb5_rd_safe() free non-malloc'ed memory

daemon@ATHENA.MIT.EDU (Michael Shields)
Thu Jul 20 22:51:09 1995

From: shields@tembel.org (Michael Shields)
To: krb5-bugs@MIT.EDU
Date: Fri, 21 Jul 1995 02:49:56 +0000 (GMT)

There is a very bad typo in krb5_{mk,rd}_safe() that causes it to segfault
on Linux, and at least have a memory leak elsewhere.  It occurs four times.

Index: krb/ChangeLog
===================================================================
RCS file: /usr/src/master/security/kerberos/src/lib/krb5/krb/ChangeLog,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 ChangeLog
--- ChangeLog	1995/07/18 06:23:34	1.1.1.1
+++ ChangeLog	1995/07/21 02:43:45
@@ -1,3 +1,10 @@
+Fri Jul 21 02:41:20 1995  Michael Shields  <shields@tembel.org>
+
+	* mk_safe.c (krb5_mk_safe): CLEANUP_PUSH(local_fulladdr.contents,
+ 	free), not &local_fulladdr.contents, which is illegal and can
+	segfault.  Same for remote_fulladdr.
+	* rd_safe.c (krb5_rd_safe): Ditto.
+
 Fri May  5 00:06:24 1995  Theodore Y. Ts'o  (tytso@dcl)
 
 	* conv_princ.c (krb5_425_conv_principal): Use new calling
Index: krb/mk_safe.c
===================================================================
RCS file: /usr/src/master/security/kerberos/src/lib/krb5/krb/mk_safe.c,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 mk_safe.c
--- mk_safe.c	1995/07/18 06:23:35	1.1.1.1
+++ mk_safe.c	1995/07/21 01:59:18
@@ -180,7 +180,7 @@
             if (!(retval = krb5_make_fulladdr(context, auth_context->local_addr,
                                  	      auth_context->local_port, 
 					      &local_fulladdr))){
-            	CLEANUP_PUSH(&local_fulladdr.contents, free);
+            	CLEANUP_PUSH(local_fulladdr.contents, free);
 	    	plocal_fulladdr = &local_fulladdr;
             } else {
                 goto error;
@@ -196,7 +196,7 @@
             if (!(retval = krb5_make_fulladdr(context,auth_context->remote_addr,
                                  	      auth_context->remote_port, 
 					      &remote_fulladdr))){
-            	CLEANUP_PUSH(&remote_fulladdr.contents, free);
+            	CLEANUP_PUSH(remote_fulladdr.contents, free);
 	    	premote_fulladdr = &remote_fulladdr;
             } else {
                 CLEANUP_DONE();
Index: krb/rd_safe.c
===================================================================
RCS file: /usr/src/master/security/kerberos/src/lib/krb5/krb/rd_safe.c,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 rd_safe.c
--- rd_safe.c	1995/07/18 06:23:36	1.1.1.1
+++ rd_safe.c	1995/07/21 02:35:45
@@ -201,7 +201,7 @@
             if (!(retval = krb5_make_fulladdr(context, auth_context->local_addr,
                                  	      auth_context->local_port, 
 					      &local_fulladdr))){
-                CLEANUP_PUSH(&local_fulladdr.contents, free);
+                CLEANUP_PUSH(local_fulladdr.contents, free);
 	        plocal_fulladdr = &local_fulladdr;
             } else {
 	        return retval;
@@ -216,7 +216,7 @@
             if (!(retval = krb5_make_fulladdr(context,auth_context->remote_addr,
                                  	      auth_context->remote_port, 
 					      &remote_fulladdr))){
-                CLEANUP_PUSH(&remote_fulladdr.contents, free);
+                CLEANUP_PUSH(remote_fulladdr.contents, free);
 	        premote_fulladdr = &remote_fulladdr;
             } else {
 	        return retval;
-- 
Shields.

home help back first fref pref prev next nref lref last post