if (mask & KADM5_KEY_DATA) {
entry->n_key_data = kdb->n_key_data;
if(entry->n_key_data) {
- entry->key_data = malloc(entry->n_key_data*sizeof(krb5_key_data));
- if (entry->key_data == NULL) {
- ret = ENOMEM;
+ entry->key_data = k5calloc(entry->n_key_data,
+ sizeof(krb5_key_data), &ret);
+ if (entry->key_data == NULL)
goto done;
- }
} else
entry->key_data = NULL;
krb5_keyblock *hist_key, int n_key_data,
krb5_key_data *key_data, osa_pw_hist_ent *hist)
{
- int i, ret;
+ krb5_error_code ret;
krb5_keyblock key;
krb5_keysalt salt;
+ int i;
- hist->key_data = (krb5_key_data*)malloc(n_key_data*sizeof(krb5_key_data));
+ hist->key_data = k5calloc(n_key_data, sizeof(krb5_key_data), &ret);
if (hist->key_data == NULL)
- return ENOMEM;
- memset(hist->key_data, 0, n_key_data*sizeof(krb5_key_data));
+ return ret;
for (i = 0; i < n_key_data; i++) {
ret = krb5_dbe_decrypt_key_data(context, NULL, &key_data[i], &key,
old_key_data = NULL;
}
- kdb->key_data = (krb5_key_data*)krb5_db_alloc(handle->context, NULL, (n_keys+n_old_keys)
- *sizeof(krb5_key_data));
+ /* Allocate one extra key_data to avoid allocating 0 bytes. */
+ kdb->key_data = krb5_db_alloc(handle->context, NULL,
+ (n_keys + n_old_keys + 1) *
+ sizeof(krb5_key_data));
if (kdb->key_data == NULL) {
ret = ENOMEM;
goto done;
old_keydata = kdb->key_data;
n_old_keydata = kdb->n_key_data;
kdb->n_key_data = 0;
+ /* Allocate one extra key_data to avoid allocating 0 bytes. */
kdb->key_data = krb5_db_alloc(handle->context, NULL,
- n_old_keydata * sizeof(krb5_key_data));
+ (n_old_keydata + 1) * sizeof(krb5_key_data));
if (kdb->key_data == NULL) {
ret = ENOMEM;
goto done;
krb5_error_code ret;
unsigned int prev_n_keys = 0;
krb5_boolean is_add;
+ void *newptr;
*entry = NULL;
if (is_add)
ent->key_data = NULL;
- ent->key_data = (krb5_key_data *)realloc(ent->key_data,
- (ent->n_key_data *
- sizeof (krb5_key_data)));
- /* XXX Memory leak: Old key data in
- records eliminated by resizing to
- smaller size. */
- if (ent->key_data == NULL)
- /* XXX Memory leak: old storage. */
- return (ENOMEM);
+ /* Allocate one extra key data to avoid allocating zero bytes. */
+ newptr = realloc(ent->key_data, (ent->n_key_data + 1) *
+ sizeof(krb5_key_data));
+ if (newptr == NULL)
+ return ENOMEM;
+ ent->key_data = newptr;
/* BEGIN CSTYLED */
for (j = prev_n_keys; j < ent->n_key_data; j++) {
}
for (cnt = 0; cnt < kp->key_data_ver; cnt++) {
- void *newptr;
kp->key_data_type[cnt] = (krb5_int16)kv->k_enctype.k_enctype_val[cnt];
kp->key_data_length[cnt] = (krb5_int16)kv->k_contents.k_contents_val[cnt].utf8str_t_len;
newptr = realloc(kp->key_data_contents[cnt],