diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2010-07-23 08:27:58 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2010-07-23 08:27:58 +0200 |
commit | 8383ca063d2473a87e585c20d80138d68d7d4dbf (patch) | |
tree | e8cadcccc58cef8a802ceb71d437749c6c285bb4 /ncr-key.c | |
parent | 619da468b62aed1c15fd81a4f630bcbb7c12dd7d (diff) | |
download | kernel-crypto-8383ca063d2473a87e585c20d80138d68d7d4dbf.tar.gz kernel-crypto-8383ca063d2473a87e585c20d80138d68d7d4dbf.tar.xz kernel-crypto-8383ca063d2473a87e585c20d80138d68d7d4dbf.zip |
Revert "Modified NCR-USER API to "simplify" and allow setting of size of data structure without special system call."
This reverts commit 5689c9734223fb349bba526d620823a803c3b67e.
Diffstat (limited to 'ncr-key.c')
-rw-r--r-- | ncr-key.c | 36 |
1 files changed, 11 insertions, 25 deletions
diff --git a/ncr-key.c b/ncr-key.c index 18cb38718a3..c6ce932c886 100644 --- a/ncr-key.c +++ b/ncr-key.c @@ -241,7 +241,6 @@ uint32_t size; uint32_t data_flags; int ret; uint8_t* tmp = NULL; -size_t max_data_size; if (unlikely(copy_from_user(&data, arg, sizeof(data)))) { err(); @@ -263,16 +262,9 @@ size_t max_data_size; data_flags = key_flags_to_data(item->flags); - ret = ncr_data_item_size(ditem, 1); - if (ret < 0) { - err(); - goto fail; - } - max_data_size = ret; - switch (item->type) { case NCR_KEY_TYPE_SECRET: - if (item->key.secret.size > max_data_size) { + if (item->key.secret.size > ditem->max_data_size) { err(); ret = -EINVAL; goto fail; @@ -291,8 +283,8 @@ size_t max_data_size; break; case NCR_KEY_TYPE_PUBLIC: case NCR_KEY_TYPE_PRIVATE: - size = max_data_size; - + size = ditem->max_data_size; + tmp = kmalloc(size, GFP_KERNEL); if (tmp == NULL) { err(); @@ -301,6 +293,8 @@ size_t max_data_size; } ret = ncr_pk_pack(item, tmp, &size); + ditem->data_size = size; + if (ret < 0) { err(); goto fail; @@ -347,7 +341,6 @@ struct key_item_st* item = NULL; struct data_item_st* ditem = NULL; uint8_t *tmp = NULL; int ret; -size_t data_size; if (unlikely(copy_from_user(&data, arg, sizeof(data)))) { err(); @@ -386,43 +379,36 @@ size_t data_size; if (data.key_id_size > 0) memcpy(item->key_id, data.key_id, data.key_id_size); - ret = ncr_data_item_size(ditem, 0); - if (ret < 0) { - err(); - goto fail; - } - data_size = ret; - switch(item->type) { case NCR_KEY_TYPE_SECRET: - if (data_size > NCR_CIPHER_MAX_KEY_LEN) { + if (ditem->data_size > NCR_CIPHER_MAX_KEY_LEN) { err(); ret = -EINVAL; goto fail; } - ret = ncr_data_item_getd(ditem, item->key.secret.data, data_size, item->flags); + ret = ncr_data_item_getd(ditem, item->key.secret.data, ditem->data_size, item->flags); if (ret < 0) { err(); goto fail; } - item->key.secret.size = data_size; + item->key.secret.size = ditem->data_size; break; case NCR_KEY_TYPE_PRIVATE: case NCR_KEY_TYPE_PUBLIC: - tmp = kmalloc(data_size, GFP_KERNEL); + tmp = kmalloc(ditem->data_size, GFP_KERNEL); if (tmp == NULL) { err(); return -ENOMEM; } - ret = ncr_data_item_getd(ditem, tmp, data_size, item->flags); + ret = ncr_data_item_getd(ditem, tmp, ditem->data_size, item->flags); if (ret < 0) { err(); goto fail; } - ret = ncr_pk_unpack( item, tmp, data_size); + ret = ncr_pk_unpack( item, tmp, ditem->data_size); if (ret < 0) { err(); goto fail; |