diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-04 18:23:14 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-04 18:23:14 -0400 |
commit | b7c8e55db7141dcbb9d5305a3260fa0ed62a1bcc (patch) | |
tree | 59fbd52d8e80e5a83d9747961d28aaf4d400613a /crypto | |
parent | ffd386a9a8273dcfa61705d0b349eebc7525ef87 (diff) | |
parent | 4015d9a865e3bcc42d88bedc8ce1551000bab664 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (39 commits)
random: Reorder struct entropy_store to remove padding on 64bits
padata: update API documentation
padata: Remove padata_get_cpumask
crypto: pcrypt - Update pcrypt cpumask according to the padata cpumask notifier
crypto: pcrypt - Rename pcrypt_instance
padata: Pass the padata cpumasks to the cpumask_change_notifier chain
padata: Rearrange set_cpumask functions
padata: Rename padata_alloc functions
crypto: pcrypt - Dont calulate a callback cpu on empty callback cpumask
padata: Check for valid cpumasks
padata: Allocate cpumask dependend recources in any case
padata: Fix cpu index counting
crypto: geode_aes - Convert pci_table entries to PCI_VDEVICE (if PCI_ANY_ID is used)
pcrypt: Added sysfs interface to pcrypt
padata: Added sysfs primitives to padata subsystem
padata: Make two separate cpumasks
padata: update documentation
padata: simplify serialization mechanism
padata: make padata_do_parallel to return zero on success
padata: Handle empty padata cpumasks
...
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/Kconfig | 15 | ||||
-rw-r--r-- | crypto/Makefile | 4 | ||||
-rw-r--r-- | crypto/algboss.c | 4 | ||||
-rw-r--r-- | crypto/authenc.c | 2 | ||||
-rw-r--r-- | crypto/ctr.c | 2 | ||||
-rw-r--r-- | crypto/pcrypt.c | 241 | ||||
-rw-r--r-- | crypto/testmgr.c | 14 | ||||
-rw-r--r-- | crypto/twofish_generic.c (renamed from crypto/twofish.c) | 1 | ||||
-rw-r--r-- | crypto/xts.c | 2 |
9 files changed, 221 insertions, 64 deletions
diff --git a/crypto/Kconfig b/crypto/Kconfig index 9d9434f08c92..1cd497d7a15a 100644 --- a/crypto/Kconfig +++ b/crypto/Kconfig | |||
@@ -80,6 +80,11 @@ config CRYPTO_RNG2 | |||
80 | 80 | ||
81 | config CRYPTO_PCOMP | 81 | config CRYPTO_PCOMP |
82 | tristate | 82 | tristate |
83 | select CRYPTO_PCOMP2 | ||
84 | select CRYPTO_ALGAPI | ||
85 | |||
86 | config CRYPTO_PCOMP2 | ||
87 | tristate | ||
83 | select CRYPTO_ALGAPI2 | 88 | select CRYPTO_ALGAPI2 |
84 | 89 | ||
85 | config CRYPTO_MANAGER | 90 | config CRYPTO_MANAGER |
@@ -94,7 +99,15 @@ config CRYPTO_MANAGER2 | |||
94 | select CRYPTO_AEAD2 | 99 | select CRYPTO_AEAD2 |
95 | select CRYPTO_HASH2 | 100 | select CRYPTO_HASH2 |
96 | select CRYPTO_BLKCIPHER2 | 101 | select CRYPTO_BLKCIPHER2 |
97 | select CRYPTO_PCOMP | 102 | select CRYPTO_PCOMP2 |
103 | |||
104 | config CRYPTO_MANAGER_TESTS | ||
105 | bool "Run algolithms' self-tests" | ||
106 | default y | ||
107 | depends on CRYPTO_MANAGER2 | ||
108 | help | ||
109 | Run cryptomanager's tests for the new crypto algorithms being | ||
110 | registered. | ||
98 | 111 | ||
99 | config CRYPTO_GF128MUL | 112 | config CRYPTO_GF128MUL |
100 | tristate "GF(2^128) multiplication functions (EXPERIMENTAL)" | 113 | tristate "GF(2^128) multiplication functions (EXPERIMENTAL)" |
diff --git a/crypto/Makefile b/crypto/Makefile index d7e6441df7fe..423b7de61f93 100644 --- a/crypto/Makefile +++ b/crypto/Makefile | |||
@@ -26,7 +26,7 @@ crypto_hash-objs += ahash.o | |||
26 | crypto_hash-objs += shash.o | 26 | crypto_hash-objs += shash.o |
27 | obj-$(CONFIG_CRYPTO_HASH2) += crypto_hash.o | 27 | obj-$(CONFIG_CRYPTO_HASH2) += crypto_hash.o |
28 | 28 | ||
29 | obj-$(CONFIG_CRYPTO_PCOMP) += pcompress.o | 29 | obj-$(CONFIG_CRYPTO_PCOMP2) += pcompress.o |
30 | 30 | ||
31 | cryptomgr-objs := algboss.o testmgr.o | 31 | cryptomgr-objs := algboss.o testmgr.o |
32 | 32 | ||
@@ -61,7 +61,7 @@ obj-$(CONFIG_CRYPTO_CRYPTD) += cryptd.o | |||
61 | obj-$(CONFIG_CRYPTO_DES) += des_generic.o | 61 | obj-$(CONFIG_CRYPTO_DES) += des_generic.o |
62 | obj-$(CONFIG_CRYPTO_FCRYPT) += fcrypt.o | 62 | obj-$(CONFIG_CRYPTO_FCRYPT) += fcrypt.o |
63 | obj-$(CONFIG_CRYPTO_BLOWFISH) += blowfish.o | 63 | obj-$(CONFIG_CRYPTO_BLOWFISH) += blowfish.o |
64 | obj-$(CONFIG_CRYPTO_TWOFISH) += twofish.o | 64 | obj-$(CONFIG_CRYPTO_TWOFISH) += twofish_generic.o |
65 | obj-$(CONFIG_CRYPTO_TWOFISH_COMMON) += twofish_common.o | 65 | obj-$(CONFIG_CRYPTO_TWOFISH_COMMON) += twofish_common.o |
66 | obj-$(CONFIG_CRYPTO_SERPENT) += serpent.o | 66 | obj-$(CONFIG_CRYPTO_SERPENT) += serpent.o |
67 | obj-$(CONFIG_CRYPTO_AES) += aes_generic.o | 67 | obj-$(CONFIG_CRYPTO_AES) += aes_generic.o |
diff --git a/crypto/algboss.c b/crypto/algboss.c index c3c196b5823a..40bd391f34d9 100644 --- a/crypto/algboss.c +++ b/crypto/algboss.c | |||
@@ -206,6 +206,7 @@ err: | |||
206 | return NOTIFY_OK; | 206 | return NOTIFY_OK; |
207 | } | 207 | } |
208 | 208 | ||
209 | #ifdef CONFIG_CRYPTO_MANAGER_TESTS | ||
209 | static int cryptomgr_test(void *data) | 210 | static int cryptomgr_test(void *data) |
210 | { | 211 | { |
211 | struct crypto_test_param *param = data; | 212 | struct crypto_test_param *param = data; |
@@ -266,6 +267,7 @@ err_put_module: | |||
266 | err: | 267 | err: |
267 | return NOTIFY_OK; | 268 | return NOTIFY_OK; |
268 | } | 269 | } |
270 | #endif /* CONFIG_CRYPTO_MANAGER_TESTS */ | ||
269 | 271 | ||
270 | static int cryptomgr_notify(struct notifier_block *this, unsigned long msg, | 272 | static int cryptomgr_notify(struct notifier_block *this, unsigned long msg, |
271 | void *data) | 273 | void *data) |
@@ -273,8 +275,10 @@ static int cryptomgr_notify(struct notifier_block *this, unsigned long msg, | |||
273 | switch (msg) { | 275 | switch (msg) { |
274 | case CRYPTO_MSG_ALG_REQUEST: | 276 | case CRYPTO_MSG_ALG_REQUEST: |
275 | return cryptomgr_schedule_probe(data); | 277 | return cryptomgr_schedule_probe(data); |
278 | #ifdef CONFIG_CRYPTO_MANAGER_TESTS | ||
276 | case CRYPTO_MSG_ALG_REGISTER: | 279 | case CRYPTO_MSG_ALG_REGISTER: |
277 | return cryptomgr_schedule_test(data); | 280 | return cryptomgr_schedule_test(data); |
281 | #endif | ||
278 | } | 282 | } |
279 | 283 | ||
280 | return NOTIFY_DONE; | 284 | return NOTIFY_DONE; |
diff --git a/crypto/authenc.c b/crypto/authenc.c index b9884ee0adb6..a5a22cfcd07b 100644 --- a/crypto/authenc.c +++ b/crypto/authenc.c | |||
@@ -616,7 +616,7 @@ static struct crypto_instance *crypto_authenc_alloc(struct rtattr **tb) | |||
616 | auth = ahash_attr_alg(tb[1], CRYPTO_ALG_TYPE_HASH, | 616 | auth = ahash_attr_alg(tb[1], CRYPTO_ALG_TYPE_HASH, |
617 | CRYPTO_ALG_TYPE_AHASH_MASK); | 617 | CRYPTO_ALG_TYPE_AHASH_MASK); |
618 | if (IS_ERR(auth)) | 618 | if (IS_ERR(auth)) |
619 | return ERR_PTR(PTR_ERR(auth)); | 619 | return ERR_CAST(auth); |
620 | 620 | ||
621 | auth_base = &auth->base; | 621 | auth_base = &auth->base; |
622 | 622 | ||
diff --git a/crypto/ctr.c b/crypto/ctr.c index 6c3bfabb9d1d..4ca7222cfeb6 100644 --- a/crypto/ctr.c +++ b/crypto/ctr.c | |||
@@ -185,7 +185,7 @@ static struct crypto_instance *crypto_ctr_alloc(struct rtattr **tb) | |||
185 | alg = crypto_attr_alg(tb[1], CRYPTO_ALG_TYPE_CIPHER, | 185 | alg = crypto_attr_alg(tb[1], CRYPTO_ALG_TYPE_CIPHER, |
186 | CRYPTO_ALG_TYPE_MASK); | 186 | CRYPTO_ALG_TYPE_MASK); |
187 | if (IS_ERR(alg)) | 187 | if (IS_ERR(alg)) |
188 | return ERR_PTR(PTR_ERR(alg)); | 188 | return ERR_CAST(alg); |
189 | 189 | ||
190 | /* Block size must be >= 4 bytes. */ | 190 | /* Block size must be >= 4 bytes. */ |
191 | err = -EINVAL; | 191 | err = -EINVAL; |
diff --git a/crypto/pcrypt.c b/crypto/pcrypt.c index 247178cb98ec..de3078215fe6 100644 --- a/crypto/pcrypt.c +++ b/crypto/pcrypt.c | |||
@@ -24,12 +24,40 @@ | |||
24 | #include <linux/init.h> | 24 | #include <linux/init.h> |
25 | #include <linux/module.h> | 25 | #include <linux/module.h> |
26 | #include <linux/slab.h> | 26 | #include <linux/slab.h> |
27 | #include <linux/notifier.h> | ||
28 | #include <linux/kobject.h> | ||
29 | #include <linux/cpu.h> | ||
27 | #include <crypto/pcrypt.h> | 30 | #include <crypto/pcrypt.h> |
28 | 31 | ||
29 | static struct padata_instance *pcrypt_enc_padata; | 32 | struct padata_pcrypt { |
30 | static struct padata_instance *pcrypt_dec_padata; | 33 | struct padata_instance *pinst; |
31 | static struct workqueue_struct *encwq; | 34 | struct workqueue_struct *wq; |
32 | static struct workqueue_struct *decwq; | 35 | |
36 | /* | ||
37 | * Cpumask for callback CPUs. It should be | ||
38 | * equal to serial cpumask of corresponding padata instance, | ||
39 | * so it is updated when padata notifies us about serial | ||
40 | * cpumask change. | ||
41 | * | ||
42 | * cb_cpumask is protected by RCU. This fact prevents us from | ||
43 | * using cpumask_var_t directly because the actual type of | ||
44 | * cpumsak_var_t depends on kernel configuration(particularly on | ||
45 | * CONFIG_CPUMASK_OFFSTACK macro). Depending on the configuration | ||
46 | * cpumask_var_t may be either a pointer to the struct cpumask | ||
47 | * or a variable allocated on the stack. Thus we can not safely use | ||
48 | * cpumask_var_t with RCU operations such as rcu_assign_pointer or | ||
49 | * rcu_dereference. So cpumask_var_t is wrapped with struct | ||
50 | * pcrypt_cpumask which makes possible to use it with RCU. | ||
51 | */ | ||
52 | struct pcrypt_cpumask { | ||
53 | cpumask_var_t mask; | ||
54 | } *cb_cpumask; | ||
55 | struct notifier_block nblock; | ||
56 | }; | ||
57 | |||
58 | static struct padata_pcrypt pencrypt; | ||
59 | static struct padata_pcrypt pdecrypt; | ||
60 | static struct kset *pcrypt_kset; | ||
33 | 61 | ||
34 | struct pcrypt_instance_ctx { | 62 | struct pcrypt_instance_ctx { |
35 | struct crypto_spawn spawn; | 63 | struct crypto_spawn spawn; |
@@ -42,25 +70,32 @@ struct pcrypt_aead_ctx { | |||
42 | }; | 70 | }; |
43 | 71 | ||
44 | static int pcrypt_do_parallel(struct padata_priv *padata, unsigned int *cb_cpu, | 72 | static int pcrypt_do_parallel(struct padata_priv *padata, unsigned int *cb_cpu, |
45 | struct padata_instance *pinst) | 73 | struct padata_pcrypt *pcrypt) |
46 | { | 74 | { |
47 | unsigned int cpu_index, cpu, i; | 75 | unsigned int cpu_index, cpu, i; |
76 | struct pcrypt_cpumask *cpumask; | ||
48 | 77 | ||
49 | cpu = *cb_cpu; | 78 | cpu = *cb_cpu; |
50 | 79 | ||
51 | if (cpumask_test_cpu(cpu, cpu_active_mask)) | 80 | rcu_read_lock_bh(); |
81 | cpumask = rcu_dereference(pcrypt->cb_cpumask); | ||
82 | if (cpumask_test_cpu(cpu, cpumask->mask)) | ||
83 | goto out; | ||
84 | |||
85 | if (!cpumask_weight(cpumask->mask)) | ||
52 | goto out; | 86 | goto out; |
53 | 87 | ||
54 | cpu_index = cpu % cpumask_weight(cpu_active_mask); | 88 | cpu_index = cpu % cpumask_weight(cpumask->mask); |
55 | 89 | ||
56 | cpu = cpumask_first(cpu_active_mask); | 90 | cpu = cpumask_first(cpumask->mask); |
57 | for (i = 0; i < cpu_index; i++) | 91 | for (i = 0; i < cpu_index; i++) |
58 | cpu = cpumask_next(cpu, cpu_active_mask); | 92 | cpu = cpumask_next(cpu, cpumask->mask); |
59 | 93 | ||
60 | *cb_cpu = cpu; | 94 | *cb_cpu = cpu; |
61 | 95 | ||
62 | out: | 96 | out: |
63 | return padata_do_parallel(pinst, padata, cpu); | 97 | rcu_read_unlock_bh(); |
98 | return padata_do_parallel(pcrypt->pinst, padata, cpu); | ||
64 | } | 99 | } |
65 | 100 | ||
66 | static int pcrypt_aead_setkey(struct crypto_aead *parent, | 101 | static int pcrypt_aead_setkey(struct crypto_aead *parent, |
@@ -142,11 +177,9 @@ static int pcrypt_aead_encrypt(struct aead_request *req) | |||
142 | req->cryptlen, req->iv); | 177 | req->cryptlen, req->iv); |
143 | aead_request_set_assoc(creq, req->assoc, req->assoclen); | 178 | aead_request_set_assoc(creq, req->assoc, req->assoclen); |
144 | 179 | ||
145 | err = pcrypt_do_parallel(padata, &ctx->cb_cpu, pcrypt_enc_padata); | 180 | err = pcrypt_do_parallel(padata, &ctx->cb_cpu, &pencrypt); |
146 | if (err) | 181 | if (!err) |
147 | return err; | 182 | return -EINPROGRESS; |
148 | else | ||
149 | err = crypto_aead_encrypt(creq); | ||
150 | 183 | ||
151 | return err; | 184 | return err; |
152 | } | 185 | } |
@@ -186,11 +219,9 @@ static int pcrypt_aead_decrypt(struct aead_request *req) | |||
186 | req->cryptlen, req->iv); | 219 | req->cryptlen, req->iv); |
187 | aead_request_set_assoc(creq, req->assoc, req->assoclen); | 220 | aead_request_set_assoc(creq, req->assoc, req->assoclen); |
188 | 221 | ||
189 | err = pcrypt_do_parallel(padata, &ctx->cb_cpu, pcrypt_dec_padata); | 222 | err = pcrypt_do_parallel(padata, &ctx->cb_cpu, &pdecrypt); |
190 | if (err) | 223 | if (!err) |
191 | return err; | 224 | return -EINPROGRESS; |
192 | else | ||
193 | err = crypto_aead_decrypt(creq); | ||
194 | 225 | ||
195 | return err; | 226 | return err; |
196 | } | 227 | } |
@@ -232,11 +263,9 @@ static int pcrypt_aead_givencrypt(struct aead_givcrypt_request *req) | |||
232 | aead_givcrypt_set_assoc(creq, areq->assoc, areq->assoclen); | 263 | aead_givcrypt_set_assoc(creq, areq->assoc, areq->assoclen); |
233 | aead_givcrypt_set_giv(creq, req->giv, req->seq); | 264 | aead_givcrypt_set_giv(creq, req->giv, req->seq); |
234 | 265 | ||
235 | err = pcrypt_do_parallel(padata, &ctx->cb_cpu, pcrypt_enc_padata); | 266 | err = pcrypt_do_parallel(padata, &ctx->cb_cpu, &pencrypt); |
236 | if (err) | 267 | if (!err) |
237 | return err; | 268 | return -EINPROGRESS; |
238 | else | ||
239 | err = crypto_aead_givencrypt(creq); | ||
240 | 269 | ||
241 | return err; | 270 | return err; |
242 | } | 271 | } |
@@ -376,6 +405,115 @@ static void pcrypt_free(struct crypto_instance *inst) | |||
376 | kfree(inst); | 405 | kfree(inst); |
377 | } | 406 | } |
378 | 407 | ||
408 | static int pcrypt_cpumask_change_notify(struct notifier_block *self, | ||
409 | unsigned long val, void *data) | ||
410 | { | ||
411 | struct padata_pcrypt *pcrypt; | ||
412 | struct pcrypt_cpumask *new_mask, *old_mask; | ||
413 | struct padata_cpumask *cpumask = (struct padata_cpumask *)data; | ||
414 | |||
415 | if (!(val & PADATA_CPU_SERIAL)) | ||
416 | return 0; | ||
417 | |||
418 | pcrypt = container_of(self, struct padata_pcrypt, nblock); | ||
419 | new_mask = kmalloc(sizeof(*new_mask), GFP_KERNEL); | ||
420 | if (!new_mask) | ||
421 | return -ENOMEM; | ||
422 | if (!alloc_cpumask_var(&new_mask->mask, GFP_KERNEL)) { | ||
423 | kfree(new_mask); | ||
424 | return -ENOMEM; | ||
425 | } | ||
426 | |||
427 | old_mask = pcrypt->cb_cpumask; | ||
428 | |||
429 | cpumask_copy(new_mask->mask, cpumask->cbcpu); | ||
430 | rcu_assign_pointer(pcrypt->cb_cpumask, new_mask); | ||
431 | synchronize_rcu_bh(); | ||
432 | |||
433 | free_cpumask_var(old_mask->mask); | ||
434 | kfree(old_mask); | ||
435 | return 0; | ||
436 | } | ||
437 | |||
438 | static int pcrypt_sysfs_add(struct padata_instance *pinst, const char *name) | ||
439 | { | ||
440 | int ret; | ||
441 | |||
442 | pinst->kobj.kset = pcrypt_kset; | ||
443 | ret = kobject_add(&pinst->kobj, NULL, name); | ||
444 | if (!ret) | ||
445 | kobject_uevent(&pinst->kobj, KOBJ_ADD); | ||
446 | |||
447 | return ret; | ||
448 | } | ||
449 | |||
450 | static int pcrypt_init_padata(struct padata_pcrypt *pcrypt, | ||
451 | const char *name) | ||
452 | { | ||
453 | int ret = -ENOMEM; | ||
454 | struct pcrypt_cpumask *mask; | ||
455 | |||
456 | get_online_cpus(); | ||
457 | |||
458 | pcrypt->wq = create_workqueue(name); | ||
459 | if (!pcrypt->wq) | ||
460 | goto err; | ||
461 | |||
462 | pcrypt->pinst = padata_alloc_possible(pcrypt->wq); | ||
463 | if (!pcrypt->pinst) | ||
464 | goto err_destroy_workqueue; | ||
465 | |||
466 | mask = kmalloc(sizeof(*mask), GFP_KERNEL); | ||
467 | if (!mask) | ||
468 | goto err_free_padata; | ||
469 | if (!alloc_cpumask_var(&mask->mask, GFP_KERNEL)) { | ||
470 | kfree(mask); | ||
471 | goto err_free_padata; | ||
472 | } | ||
473 | |||
474 | cpumask_and(mask->mask, cpu_possible_mask, cpu_active_mask); | ||
475 | rcu_assign_pointer(pcrypt->cb_cpumask, mask); | ||
476 | |||
477 | pcrypt->nblock.notifier_call = pcrypt_cpumask_change_notify; | ||
478 | ret = padata_register_cpumask_notifier(pcrypt->pinst, &pcrypt->nblock); | ||
479 | if (ret) | ||
480 | goto err_free_cpumask; | ||
481 | |||
482 | ret = pcrypt_sysfs_add(pcrypt->pinst, name); | ||
483 | if (ret) | ||
484 | goto err_unregister_notifier; | ||
485 | |||
486 | put_online_cpus(); | ||
487 | |||
488 | return ret; | ||
489 | |||
490 | err_unregister_notifier: | ||
491 | padata_unregister_cpumask_notifier(pcrypt->pinst, &pcrypt->nblock); | ||
492 | err_free_cpumask: | ||
493 | free_cpumask_var(mask->mask); | ||
494 | kfree(mask); | ||
495 | err_free_padata: | ||
496 | padata_free(pcrypt->pinst); | ||
497 | err_destroy_workqueue: | ||
498 | destroy_workqueue(pcrypt->wq); | ||
499 | err: | ||
500 | put_online_cpus(); | ||
501 | |||
502 | return ret; | ||
503 | } | ||
504 | |||
505 | static void pcrypt_fini_padata(struct padata_pcrypt *pcrypt) | ||
506 | { | ||
507 | kobject_put(&pcrypt->pinst->kobj); | ||
508 | free_cpumask_var(pcrypt->cb_cpumask->mask); | ||
509 | kfree(pcrypt->cb_cpumask); | ||
510 | |||
511 | padata_stop(pcrypt->pinst); | ||
512 | padata_unregister_cpumask_notifier(pcrypt->pinst, &pcrypt->nblock); | ||
513 | destroy_workqueue(pcrypt->wq); | ||
514 | padata_free(pcrypt->pinst); | ||
515 | } | ||
516 | |||
379 | static struct crypto_template pcrypt_tmpl = { | 517 | static struct crypto_template pcrypt_tmpl = { |
380 | .name = "pcrypt", | 518 | .name = "pcrypt", |
381 | .alloc = pcrypt_alloc, | 519 | .alloc = pcrypt_alloc, |
@@ -385,52 +523,39 @@ static struct crypto_template pcrypt_tmpl = { | |||
385 | 523 | ||
386 | static int __init pcrypt_init(void) | 524 | static int __init pcrypt_init(void) |
387 | { | 525 | { |
388 | encwq = create_workqueue("pencrypt"); | 526 | int err = -ENOMEM; |
389 | if (!encwq) | ||
390 | goto err; | ||
391 | |||
392 | decwq = create_workqueue("pdecrypt"); | ||
393 | if (!decwq) | ||
394 | goto err_destroy_encwq; | ||
395 | 527 | ||
528 | pcrypt_kset = kset_create_and_add("pcrypt", NULL, kernel_kobj); | ||
529 | if (!pcrypt_kset) | ||
530 | goto err; | ||
396 | 531 | ||
397 | pcrypt_enc_padata = padata_alloc(cpu_possible_mask, encwq); | 532 | err = pcrypt_init_padata(&pencrypt, "pencrypt"); |
398 | if (!pcrypt_enc_padata) | 533 | if (err) |
399 | goto err_destroy_decwq; | 534 | goto err_unreg_kset; |
400 | 535 | ||
401 | pcrypt_dec_padata = padata_alloc(cpu_possible_mask, decwq); | 536 | err = pcrypt_init_padata(&pdecrypt, "pdecrypt"); |
402 | if (!pcrypt_dec_padata) | 537 | if (err) |
403 | goto err_free_padata; | 538 | goto err_deinit_pencrypt; |
404 | 539 | ||
405 | padata_start(pcrypt_enc_padata); | 540 | padata_start(pencrypt.pinst); |
406 | padata_start(pcrypt_dec_padata); | 541 | padata_start(pdecrypt.pinst); |
407 | 542 | ||
408 | return crypto_register_template(&pcrypt_tmpl); | 543 | return crypto_register_template(&pcrypt_tmpl); |
409 | 544 | ||
410 | err_free_padata: | 545 | err_deinit_pencrypt: |
411 | padata_free(pcrypt_enc_padata); | 546 | pcrypt_fini_padata(&pencrypt); |
412 | 547 | err_unreg_kset: | |
413 | err_destroy_decwq: | 548 | kset_unregister(pcrypt_kset); |
414 | destroy_workqueue(decwq); | ||
415 | |||
416 | err_destroy_encwq: | ||
417 | destroy_workqueue(encwq); | ||
418 | |||
419 | err: | 549 | err: |
420 | return -ENOMEM; | 550 | return err; |
421 | } | 551 | } |
422 | 552 | ||
423 | static void __exit pcrypt_exit(void) | 553 | static void __exit pcrypt_exit(void) |
424 | { | 554 | { |
425 | padata_stop(pcrypt_enc_padata); | 555 | pcrypt_fini_padata(&pencrypt); |
426 | padata_stop(pcrypt_dec_padata); | 556 | pcrypt_fini_padata(&pdecrypt); |
427 | |||
428 | destroy_workqueue(encwq); | ||
429 | destroy_workqueue(decwq); | ||
430 | |||
431 | padata_free(pcrypt_enc_padata); | ||
432 | padata_free(pcrypt_dec_padata); | ||
433 | 557 | ||
558 | kset_unregister(pcrypt_kset); | ||
434 | crypto_unregister_template(&pcrypt_tmpl); | 559 | crypto_unregister_template(&pcrypt_tmpl); |
435 | } | 560 | } |
436 | 561 | ||
diff --git a/crypto/testmgr.c b/crypto/testmgr.c index 5c8aaa0cb0b9..abd980c729eb 100644 --- a/crypto/testmgr.c +++ b/crypto/testmgr.c | |||
@@ -22,6 +22,17 @@ | |||
22 | #include <crypto/rng.h> | 22 | #include <crypto/rng.h> |
23 | 23 | ||
24 | #include "internal.h" | 24 | #include "internal.h" |
25 | |||
26 | #ifndef CONFIG_CRYPTO_MANAGER_TESTS | ||
27 | |||
28 | /* a perfect nop */ | ||
29 | int alg_test(const char *driver, const char *alg, u32 type, u32 mask) | ||
30 | { | ||
31 | return 0; | ||
32 | } | ||
33 | |||
34 | #else | ||
35 | |||
25 | #include "testmgr.h" | 36 | #include "testmgr.h" |
26 | 37 | ||
27 | /* | 38 | /* |
@@ -2530,4 +2541,7 @@ notest: | |||
2530 | non_fips_alg: | 2541 | non_fips_alg: |
2531 | return -EINVAL; | 2542 | return -EINVAL; |
2532 | } | 2543 | } |
2544 | |||
2545 | #endif /* CONFIG_CRYPTO_MANAGER_TESTS */ | ||
2546 | |||
2533 | EXPORT_SYMBOL_GPL(alg_test); | 2547 | EXPORT_SYMBOL_GPL(alg_test); |
diff --git a/crypto/twofish.c b/crypto/twofish_generic.c index dfcda231f87a..1f07b843e07c 100644 --- a/crypto/twofish.c +++ b/crypto/twofish_generic.c | |||
@@ -212,3 +212,4 @@ module_exit(twofish_mod_fini); | |||
212 | 212 | ||
213 | MODULE_LICENSE("GPL"); | 213 | MODULE_LICENSE("GPL"); |
214 | MODULE_DESCRIPTION ("Twofish Cipher Algorithm"); | 214 | MODULE_DESCRIPTION ("Twofish Cipher Algorithm"); |
215 | MODULE_ALIAS("twofish"); | ||
diff --git a/crypto/xts.c b/crypto/xts.c index d87b0f3102c3..555ecaab1e54 100644 --- a/crypto/xts.c +++ b/crypto/xts.c | |||
@@ -224,7 +224,7 @@ static struct crypto_instance *alloc(struct rtattr **tb) | |||
224 | alg = crypto_get_attr_alg(tb, CRYPTO_ALG_TYPE_CIPHER, | 224 | alg = crypto_get_attr_alg(tb, CRYPTO_ALG_TYPE_CIPHER, |
225 | CRYPTO_ALG_TYPE_MASK); | 225 | CRYPTO_ALG_TYPE_MASK); |
226 | if (IS_ERR(alg)) | 226 | if (IS_ERR(alg)) |
227 | return ERR_PTR(PTR_ERR(alg)); | 227 | return ERR_CAST(alg); |
228 | 228 | ||
229 | inst = crypto_alloc_instance("xts", alg); | 229 | inst = crypto_alloc_instance("xts", alg); |
230 | if (IS_ERR(inst)) | 230 | if (IS_ERR(inst)) |