summaryrefslogtreecommitdiffstats
path: root/ncr-key.c
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2010-07-23 08:27:58 +0200
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2010-07-23 08:27:58 +0200
commit8383ca063d2473a87e585c20d80138d68d7d4dbf (patch)
treee8cadcccc58cef8a802ceb71d437749c6c285bb4 /ncr-key.c
parent619da468b62aed1c15fd81a4f630bcbb7c12dd7d (diff)
downloadkernel-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.c36
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;