diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2010-06-17 21:29:51 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2010-06-17 21:29:51 +0200 |
commit | cc991ff936e519c21f6d82dc9030caf1340416e4 (patch) | |
tree | 0d695669912965ca39c99210d8d46a8118e95986 | |
parent | a3ae7330ecc0b8796945536771e20d586a51987d (diff) | |
download | cryptodev-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.c | 5 | ||||
-rw-r--r-- | ncr-data.c | 9 | ||||
-rw-r--r-- | ncr-key-storage.c | 1 | ||||
-rw-r--r-- | ncr-sessions.c | 1 |
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)"); @@ -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) { |