svn rev #22181: branches/krb5-1-6/src/ lib/krb5/asn.1/ tests/asn.1/

tlyu@MIT.EDU tlyu at MIT.EDU
Tue Apr 7 21:23:04 EDT 2009


http://src.mit.edu/fisheye/changelog/krb5/?cs=22181
Commit By: tlyu
Log Message:
ticket: 6448
subject: CVE-2009-0846 (1.6.x) asn1_decode_generaltime can free uninitialized pointer
tags: pullup
target_version: 1.6.4
version_fixed: 1.6.4

pull up rxxxx from trunk

The asn1_decode_generaltime() function can free an uninitialized
pointer if asn1buf_remove_charstring() fails.


Changed Files:
U   branches/krb5-1-6/src/lib/krb5/asn.1/asn1_decode.c
U   branches/krb5-1-6/src/tests/asn.1/krb5_decode_test.c
Modified: branches/krb5-1-6/src/lib/krb5/asn.1/asn1_decode.c
===================================================================
--- branches/krb5-1-6/src/lib/krb5/asn.1/asn1_decode.c	2009-04-08 01:22:57 UTC (rev 22180)
+++ branches/krb5-1-6/src/lib/krb5/asn.1/asn1_decode.c	2009-04-08 01:23:03 UTC (rev 22181)
@@ -231,6 +231,7 @@
 
   if(length != 15) return ASN1_BAD_LENGTH;
   retval = asn1buf_remove_charstring(buf,15,&s);
+  if (retval) return retval;
   /* Time encoding: YYYYMMDDhhmmssZ */
   if(s[14] != 'Z') {
       free(s);

Modified: branches/krb5-1-6/src/tests/asn.1/krb5_decode_test.c
===================================================================
--- branches/krb5-1-6/src/tests/asn.1/krb5_decode_test.c	2009-04-08 01:22:57 UTC (rev 22180)
+++ branches/krb5-1-6/src/tests/asn.1/krb5_decode_test.c	2009-04-08 01:23:03 UTC (rev 22181)
@@ -485,6 +485,22 @@
     ktest_destroy_keyblock(&(ref.subkey));
     ref.seq_number = 0;
     decode_run("ap_rep_enc_part","(optionals NULL)","7B 1C 30 1A A0 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A1 05 02 03 01 E2 40",decode_krb5_ap_rep_enc_part,ktest_equal_ap_rep_enc_part,krb5_free_ap_rep_enc_part);
+
+    retval = krb5_data_hex_parse(&code, "7B 06 30 04 A0 11 18 0F 31 39 39 34 30 36 31 30 30 36 30 33 31 37 5A A1 05 02 03 01 E2 40");
+    if (retval) {
+	com_err("krb5_decode_test", retval, "while parsing");
+	exit(1);
+    }
+    retval = decode_krb5_ap_rep_enc_part(&code, &var);
+    if (retval != ASN1_OVERRUN) {
+	printf("ERROR: ");
+    } else {
+	printf("OK: ");
+    }
+    printf("ap_rep_enc_part(optionals NULL + expect ASN1_OVERRUN for inconsistent length of timestamp)\n");
+    krb5_free_data_contents(test_context, &code);
+    if (!retval) krb5_free_ap_rep_enc_part(test_context, var);
+
     ktest_empty_ap_rep_enc_part(&ref);
   }
   




More information about the cvs-krb5 mailing list