summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2010-06-17 21:29:51 +0200
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2010-06-17 21:29:51 +0200
commitcc991ff936e519c21f6d82dc9030caf1340416e4 (patch)
tree0d695669912965ca39c99210d8d46a8118e95986
parenta3ae7330ecc0b8796945536771e20d586a51987d (diff)
downloadcryptodev-linux-cc991ff936e519c21f6d82dc9030caf1340416e4.tar.gz
cryptodev-linux-cc991ff936e519c21f6d82dc9030caf1340416e4.tar.xz
cryptodev-linux-cc991ff936e519c21f6d82dc9030caf1340416e4.zip
Several fixes related to checks with copy_from/to_user.
-rw-r--r--examples/new.c5
-rw-r--r--ncr-data.c9
-rw-r--r--ncr-key-storage.c1
-rw-r--r--ncr-sessions.c1
4 files changed, 11 insertions, 5 deletions
diff --git a/examples/new.c b/examples/new.c
index 72f1517..3cfc206 100644
--- a/examples/new.c
+++ b/examples/new.c
@@ -673,10 +673,6 @@ test_ncr_store_wrap_key(int cfd)
}
/* now export the unwrapped */
- /* this cannot be performed like that, because unwrap
- * always sets keys as unexportable. Maybe we can implement
- * a data comparison ioctl().
- */
memset(&keydata, 0, sizeof(keydata));
keydata.key = key2;
keydata.data = dd;
@@ -687,6 +683,7 @@ test_ncr_store_wrap_key(int cfd)
return 1;
}
+ kdata.data = data;
if (ioctl(cfd, NCRIO_DATA_GET, &kdata)) {
fprintf(stderr, "Error: %s:%d\n", __func__, __LINE__);
perror("ioctl(NCRIO_DATA_GET)");
diff --git a/ncr-data.c b/ncr-data.c
index 27aadd5..514763d 100644
--- a/ncr-data.c
+++ b/ncr-data.c
@@ -220,9 +220,16 @@ int ncr_data_get(struct list_sem_st* lst, void __user* arg)
get.data_size = len;
ret = copy_to_user(arg, &get, sizeof(get));
+ if (unlikely(ret)) {
+ err();
+ }
- if (ret == 0 && len > 0)
+ if (ret == 0 && len > 0) {
ret = copy_to_user(get.data, data->data, len);
+ if (unlikely(ret)) {
+ err();
+ }
+ }
cleanup:
_ncr_data_item_put( data);
diff --git a/ncr-key-storage.c b/ncr-key-storage.c
index 5cdb9c6..a7b995d 100644
--- a/ncr-key-storage.c
+++ b/ncr-key-storage.c
@@ -88,6 +88,7 @@ int key_from_storage_data(struct key_item_st* key, const void* data, size_t data
key->type = pkey->type;
key->flags = pkey->flags;
+
key->algorithm = pkey->algorithm;
key->key_id_size = pkey->key_id_size;
memcpy(key->key_id, pkey->key_id, pkey->key_id_size);
diff --git a/ncr-sessions.c b/ncr-sessions.c
index 7ae96c0..69c0276 100644
--- a/ncr-sessions.c
+++ b/ncr-sessions.c
@@ -558,6 +558,7 @@ int ncr_session_once(struct ncr_lists* lists, void __user* arg)
err();
return ret;
}
+ kop.op.ses = kop.init.ses;
ret = _ncr_session_final(lists, &kop.op);
if (ret < 0) {