(krb5_string_to_key_derived): leak less memory
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@10118 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		| @@ -1725,7 +1725,7 @@ ARCFOUR_subencrypt(krb5_context context, | ||||
|     krb5_keyblock kb; | ||||
|     unsigned char t[4]; | ||||
|     RC4_KEY rc4_key; | ||||
|     char *cdata = (char *)data; | ||||
|     unsigned char *cdata = data; | ||||
|     unsigned char k1_c_data[16], k2_c_data[16], k3_c_data[16]; | ||||
|  | ||||
|     t[0] = (usage >>  0) & 0xFF; | ||||
| @@ -1781,7 +1781,7 @@ ARCFOUR_subdecrypt(krb5_context context, | ||||
|     krb5_keyblock kb; | ||||
|     unsigned char t[4]; | ||||
|     RC4_KEY rc4_key; | ||||
|     char *cdata = (char *)data; | ||||
|     unsigned char *cdata = data; | ||||
|     unsigned char k1_c_data[16], k2_c_data[16], k3_c_data[16]; | ||||
|     unsigned char cksum_data[16]; | ||||
|  | ||||
| @@ -3000,6 +3000,7 @@ krb5_string_to_key_derived(krb5_context context, | ||||
|     struct encryption_type *et = _find_enctype(etype); | ||||
|     krb5_error_code ret; | ||||
|     struct key_data kd; | ||||
|     size_t keylen = et->keytype->bits / 8; | ||||
|     u_char *tmp; | ||||
|  | ||||
|     if(et == NULL) { | ||||
| @@ -3008,13 +3009,28 @@ krb5_string_to_key_derived(krb5_context context, | ||||
| 	return KRB5_PROG_ETYPE_NOSUPP; | ||||
|     } | ||||
|     ALLOC(kd.key, 1); | ||||
|     if(kd.key == NULL) { | ||||
| 	krb5_set_error_string (context, "malloc: out of memory"); | ||||
| 	return ENOMEM; | ||||
|     } | ||||
|     ret = krb5_data_alloc(&kd.key->keyvalue, et->keytype->size); | ||||
|     if(ret) { | ||||
| 	free(kd.key); | ||||
| 	return ret; | ||||
|     } | ||||
|     kd.key->keytype = etype; | ||||
|     tmp = malloc (et->keytype->bits / 8); | ||||
|     _krb5_n_fold(str, len, tmp, et->keytype->bits / 8); | ||||
|     krb5_data_alloc(&kd.key->keyvalue, et->keytype->size); | ||||
|     tmp = malloc (keylen); | ||||
|     if(tmp == NULL) { | ||||
| 	krb5_free_keyblock(context, kd.key); | ||||
| 	krb5_set_error_string (context, "malloc: out of memory"); | ||||
| 	return ENOMEM; | ||||
|     } | ||||
|     _krb5_n_fold(str, len, tmp, keylen); | ||||
|     kd.schedule = NULL; | ||||
|     DES3_postproc (context, tmp, et->keytype->bits / 8, &kd); /* XXX */ | ||||
|     ret = derive_key(context, | ||||
|     DES3_postproc (context, tmp, keylen, &kd); /* XXX */ | ||||
|     memset(tmp, 0, keylen); | ||||
|     free(tmp); | ||||
|     ret = derive_key(context,  | ||||
| 		     et, | ||||
| 		     &kd, | ||||
| 		     "kerberos", /* XXX well known constant */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Johan Danielsson
					Johan Danielsson