summaryrefslogtreecommitdiffstats
path: root/ncr-key-wrap.c
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2010-07-21 20:02:50 +0200
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2010-07-21 20:02:50 +0200
commit5689c9734223fb349bba526d620823a803c3b67e (patch)
tree07d02fcc9b0f10f41344312474c91fd4cf3da615 /ncr-key-wrap.c
parent514a0e99c176081e1cb610a3e8dabf4d2da38dab (diff)
downloadkernel-crypto-5689c9734223fb349bba526d620823a803c3b67e.tar.gz
kernel-crypto-5689c9734223fb349bba526d620823a803c3b67e.tar.xz
kernel-crypto-5689c9734223fb349bba526d620823a803c3b67e.zip
Modified NCR-USER API to "simplify" and allow setting of size of data structure without special system call.
Diffstat (limited to 'ncr-key-wrap.c')
-rw-r--r--ncr-key-wrap.c44
1 files changed, 36 insertions, 8 deletions
diff --git a/ncr-key-wrap.c b/ncr-key-wrap.c
index d38edcad6fc..67fe10df7f8 100644
--- a/ncr-key-wrap.c
+++ b/ncr-key-wrap.c
@@ -51,8 +51,17 @@ uint8_t aes_block[16];
int i,j, ret;
uint8_t * output;
size_t output_size = (n+1)*8;
+size_t max_data_size;
- if (odata->max_data_size < output_size) {
+ ret = ncr_data_item_size(odata, 1);
+ if (ret < 0) {
+ err();
+ return ret;
+ }
+ max_data_size = ret;
+
+
+ if (max_data_size < output_size) {
err();
return -EINVAL;
}
@@ -193,6 +202,14 @@ struct cipher_data ctx;
uint8_t iv[4];
size_t size;
+ ret = ncr_data_item_size(wrapped, 0);
+ if (ret < 0) {
+ err();
+ return ret;
+ }
+ wrapped_key_size = ret;
+
+
if (iv_size != 4) {
memcpy(iv, RFC5649_IV, 4);
} else {
@@ -206,16 +223,16 @@ size_t size;
return ret;
}
- wrapped_key = kmalloc(wrapped->data_size, GFP_KERNEL);
+ wrapped_key = kmalloc(wrapped_key_size, GFP_KERNEL);
if (wrapped_key == NULL) {
err();
ret = -ENOMEM;
goto cleanup;
}
- wrapped_key_size = wrapped->data_size;
- ret = ncr_data_item_getd( wrapped, wrapped_key, wrapped->data_size, wrapped->flags);
+
+ ret = ncr_data_item_getd( wrapped, wrapped_key, wrapped_key_size, wrapped->flags);
if (ret < 0) {
err();
goto cleanup;
@@ -390,6 +407,13 @@ val64_t A;
int i, ret;
struct cipher_data ctx;
+ ret = ncr_data_item_size(wrapped, 0);
+ if (ret < 0) {
+ err();
+ return ret;
+ }
+ wrapped_key_size = ret;
+
if (iv_size < sizeof(initA)) {
iv_size = sizeof(initA);
iv = initA;
@@ -403,15 +427,13 @@ struct cipher_data ctx;
output->type = NCR_KEY_TYPE_SECRET;
- wrapped_key = kmalloc(wrapped->data_size, GFP_KERNEL);
+ wrapped_key = kmalloc(wrapped_key_size, GFP_KERNEL);
if (wrapped_key == NULL) {
err();
ret = -ENOMEM;
goto cleanup;
}
- wrapped_key_size = wrapped->data_size;
-
ret = ncr_data_item_getd( wrapped, wrapped_key, wrapped_key_size, wrapped->flags);
if (ret < 0) {
err();
@@ -674,7 +696,13 @@ int ret;
goto fail;
}
- sdata_size = data->data_size;
+ ret = ncr_data_item_size(data, 0);
+ if (ret < 0) {
+ err();
+ return ret;
+ }
+ sdata_size = ret;
+
sdata = kmalloc(sdata_size, GFP_KERNEL);
if (sdata == NULL) {
err();