Check return values from alloc functions. Prompted by patch of Charles Longeau.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@21737 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -425,6 +425,7 @@ DES3_string_to_key(krb5_context context,
|
||||
size_t len;
|
||||
unsigned char tmp[24];
|
||||
DES_cblock keys[3];
|
||||
krb5_error_code ret;
|
||||
|
||||
len = password.length + salt.saltvalue.length;
|
||||
str = malloc(len);
|
||||
@@ -439,7 +440,13 @@ DES3_string_to_key(krb5_context context,
|
||||
DES_key_schedule s[3];
|
||||
int i;
|
||||
|
||||
_krb5_n_fold(str, len, tmp, 24);
|
||||
ret = _krb5_n_fold(str, len, tmp, 24);
|
||||
if (ret) {
|
||||
memset(str, 0, len);
|
||||
free(str);
|
||||
krb5_set_error_string(context, "out of memory");
|
||||
return ret;
|
||||
}
|
||||
|
||||
for(i = 0; i < 3; i++){
|
||||
memcpy(keys + i, tmp + i * 8, sizeof(keys[i]));
|
||||
@@ -557,12 +564,14 @@ ARCFOUR_string_to_key(krb5_context context,
|
||||
size_t len;
|
||||
int i;
|
||||
MD4_CTX m;
|
||||
krb5_error_code ret;
|
||||
|
||||
len = 2 * password.length;
|
||||
s = malloc (len);
|
||||
if (len != 0 && s == NULL) {
|
||||
krb5_set_error_string(context, "malloc: out of memory");
|
||||
return ENOMEM;
|
||||
ret = ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
for (p = s, i = 0; i < password.length; ++i) {
|
||||
*p++ = ((char *)password.data)[i];
|
||||
@@ -571,11 +580,17 @@ ARCFOUR_string_to_key(krb5_context context,
|
||||
MD4_Init (&m);
|
||||
MD4_Update (&m, s, len);
|
||||
key->keytype = enctype;
|
||||
krb5_data_alloc (&key->keyvalue, 16);
|
||||
ret = krb5_data_alloc (&key->keyvalue, 16);
|
||||
if (ret) {
|
||||
krb5_set_error_string(context, "malloc: out of memory");
|
||||
goto out;
|
||||
}
|
||||
MD4_Final (key->keyvalue.data, &m);
|
||||
memset (s, 0, len);
|
||||
ret = 0;
|
||||
out:
|
||||
free (s);
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1829,7 +1844,9 @@ create_checksum (krb5_context context,
|
||||
} else
|
||||
dkey = NULL;
|
||||
result->cksumtype = ct->type;
|
||||
krb5_data_alloc(&result->checksum, ct->checksumsize);
|
||||
ret = krb5_data_alloc(&result->checksum, ct->checksumsize);
|
||||
if (ret)
|
||||
return (ret);
|
||||
(*ct->checksum)(context, dkey, data, len, usage, result);
|
||||
return 0;
|
||||
}
|
||||
@@ -3525,15 +3542,19 @@ derive_key(krb5_context context,
|
||||
ret = _key_schedule(context, key);
|
||||
if(ret)
|
||||
return ret;
|
||||
if(et->blocksize * 8 < kt->bits ||
|
||||
len != et->blocksize) {
|
||||
if(et->blocksize * 8 < kt->bits || len != et->blocksize) {
|
||||
nblocks = (kt->bits + et->blocksize * 8 - 1) / (et->blocksize * 8);
|
||||
k = malloc(nblocks * et->blocksize);
|
||||
if(k == NULL) {
|
||||
krb5_set_error_string(context, "malloc: out of memory");
|
||||
return ENOMEM;
|
||||
}
|
||||
_krb5_n_fold(constant, len, k, et->blocksize);
|
||||
ret = _krb5_n_fold(constant, len, k, et->blocksize);
|
||||
if (ret) {
|
||||
free(k);
|
||||
krb5_set_error_string(context, "out of memory");
|
||||
return ret;
|
||||
}
|
||||
for(i = 0; i < nblocks; i++) {
|
||||
if(i > 0)
|
||||
memcpy(k + i * et->blocksize,
|
||||
@@ -3559,7 +3580,12 @@ derive_key(krb5_context context,
|
||||
krb5_set_error_string(context, "malloc: out of memory");
|
||||
return ENOMEM;
|
||||
}
|
||||
_krb5_n_fold(c, len, k, res_len);
|
||||
ret = _krb5_n_fold(c, len, k, res_len);
|
||||
if (ret) {
|
||||
free(k);
|
||||
krb5_set_error_string(context, "out of memory");
|
||||
return ret;
|
||||
}
|
||||
free(c);
|
||||
}
|
||||
|
||||
@@ -3821,7 +3847,12 @@ krb5_string_to_key_derived(krb5_context context,
|
||||
krb5_set_error_string (context, "malloc: out of memory");
|
||||
return ENOMEM;
|
||||
}
|
||||
_krb5_n_fold(str, len, tmp, keylen);
|
||||
ret = _krb5_n_fold(str, len, tmp, keylen);
|
||||
if (ret) {
|
||||
free(tmp);
|
||||
krb5_set_error_string(context, "out of memory");
|
||||
return ret;
|
||||
}
|
||||
kd.schedule = NULL;
|
||||
DES3_postproc (context, tmp, keylen, &kd); /* XXX */
|
||||
memset(tmp, 0, keylen);
|
||||
@@ -4122,7 +4153,7 @@ main()
|
||||
|
||||
d = _new_derived_key(crypto, usage);
|
||||
if(d == NULL)
|
||||
return ENOMEM;
|
||||
krb5_errx(context, 1, "_new_derived_key failed");
|
||||
krb5_copy_keyblock(context, crypto->key.key, &d->key);
|
||||
_krb5_put_int(constant, usage, 4);
|
||||
derive_key(context, crypto->et, d, constant, sizeof(constant));
|
||||
@@ -4148,11 +4179,10 @@ main()
|
||||
"\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"; */
|
||||
key.keyvalue.length = 4;
|
||||
|
||||
d = calloc(1, sizeof(*d));
|
||||
|
||||
d = ecalloc(1, sizeof(*d));
|
||||
d->key = &key;
|
||||
res.checksum.length = 20;
|
||||
res.checksum.data = malloc(res.checksum.length);
|
||||
res.checksum.data = emalloc(res.checksum.length);
|
||||
SP_HMAC_SHA1_checksum(context, d, data, 28, &res);
|
||||
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user