diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2010-07-21 20:02:50 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2010-07-21 20:02:50 +0200 |
commit | 5689c9734223fb349bba526d620823a803c3b67e (patch) | |
tree | 07d02fcc9b0f10f41344312474c91fd4cf3da615 /ncr-key-wrap.c | |
parent | 514a0e99c176081e1cb610a3e8dabf4d2da38dab (diff) | |
download | kernel-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.c | 44 |
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(); |