diff options
author | Michael Weiser <michael@weiser.dinsnail.net> | 2010-02-26 18:35:49 +0100 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2010-02-26 18:35:49 +0100 |
commit | 1dfb8ca06b6332b70aa9157605eed984620b50df (patch) | |
tree | 331dcb3edd12fb3bff963cb455ee99a30b16c7c9 | |
parent | 99f830ad944ba6944ab1f5265ab10532eaef5589 (diff) | |
download | cryptodev-linux-1dfb8ca06b6332b70aa9157605eed984620b50df.tar.gz cryptodev-linux-1dfb8ca06b6332b70aa9157605eed984620b50df.tar.xz cryptodev-linux-1dfb8ca06b6332b70aa9157605eed984620b50df.zip |
cryptodev initialises its sg with sg_set_buf. Although I'm not
sure, what the repercussions are, I changed it to sg_init_one with no
ill effects.
Added comment for wait_for_completion().
Signed-off-by: Nikos Mavrogiannopoulos <nmav@gnutls.org>
-rw-r--r-- | cryptodev_cipher.c | 6 | ||||
-rw-r--r-- | cryptodev_main.c | 6 |
2 files changed, 8 insertions, 4 deletions
diff --git a/cryptodev_cipher.c b/cryptodev_cipher.c index 97998fe..60a55db 100644 --- a/cryptodev_cipher.c +++ b/cryptodev_cipher.c @@ -148,7 +148,11 @@ static inline int waitfor (struct cryptodev_result* cr, ssize_t ret) case -EINPROGRESS: case -EBUSY: wait_for_completion(&cr->completion); - /* no error from wait_for_completion */ + /* At this point we known for sure the request has finished, + * because wait_for_completion above was not interruptible. + * This is important because otherwise hardware or driver + * might try to access memory which will be freed or reused for + * another request. */ if (cr->err) { dprintk(0,KERN_ERR,"error from async request: %zd \n", ret); diff --git a/cryptodev_main.c b/cryptodev_main.c index 1d6b614..63ce162 100644 --- a/cryptodev_main.c +++ b/cryptodev_main.c @@ -345,7 +345,7 @@ crypto_run(struct fcrypt *fcr, struct crypt_op *cop) unsigned int ivsize=0; size_t nbytes, bufsize; int ret = 0; - uint8_t hash_output[HASH_MAX_LEN]; + uint8_t hash_output[AALG_MAX_RESULT_LEN]; if (unlikely(cop->op != COP_ENCRYPT && cop->op != COP_DECRYPT)) { dprintk(1, KERN_DEBUG, "invalid operation op=%u\n", cop->op); @@ -405,7 +405,7 @@ crypto_run(struct fcrypt *fcr, struct crypt_op *cop) copy_from_user(data, src, current_len); - sg_set_buf(&sg, data, current_len); + sg_init_one(&sg, data, current_len); /* Always hash before encryption and after decryption. Maybe * we should introduce a flag to switch... TBD later on. @@ -586,7 +586,7 @@ struct file_operations cryptodev_fops = { }; struct miscdevice cryptodev = { - .minor = CRYPTODEV_MINOR, + .minor = MISC_DYNAMIC_MINOR, .name = "crypto", .fops = &cryptodev_fops, }; |