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)) |
