diff options
-rw-r--r-- | crypto/api.c | 3 | ||||
-rw-r--r-- | crypto/cipher.c | 4 | ||||
-rw-r--r-- | crypto/internal.h | 3 | ||||
-rw-r--r-- | include/linux/crypto.h | 1 |
4 files changed, 5 insertions, 6 deletions
diff --git a/crypto/api.c b/crypto/api.c index b4728811ce3b..959c4e5f264f 100644 --- a/crypto/api.c +++ b/crypto/api.c | |||
@@ -66,7 +66,8 @@ static inline struct crypto_alg *crypto_alg_mod_lookup(const char *name) | |||
66 | 66 | ||
67 | static int crypto_init_flags(struct crypto_tfm *tfm, u32 flags) | 67 | static int crypto_init_flags(struct crypto_tfm *tfm, u32 flags) |
68 | { | 68 | { |
69 | tfm->crt_flags = 0; | 69 | tfm->crt_flags = flags & CRYPTO_TFM_REQ_MASK; |
70 | flags &= ~CRYPTO_TFM_REQ_MASK; | ||
70 | 71 | ||
71 | switch (crypto_tfm_alg_type(tfm)) { | 72 | switch (crypto_tfm_alg_type(tfm)) { |
72 | case CRYPTO_ALG_TYPE_CIPHER: | 73 | case CRYPTO_ALG_TYPE_CIPHER: |
diff --git a/crypto/cipher.c b/crypto/cipher.c index 8da644364cb4..3df47f93c9db 100644 --- a/crypto/cipher.c +++ b/crypto/cipher.c | |||
@@ -377,11 +377,7 @@ static int nocrypt_iv(struct crypto_tfm *tfm, | |||
377 | int crypto_init_cipher_flags(struct crypto_tfm *tfm, u32 flags) | 377 | int crypto_init_cipher_flags(struct crypto_tfm *tfm, u32 flags) |
378 | { | 378 | { |
379 | u32 mode = flags & CRYPTO_TFM_MODE_MASK; | 379 | u32 mode = flags & CRYPTO_TFM_MODE_MASK; |
380 | |||
381 | tfm->crt_cipher.cit_mode = mode ? mode : CRYPTO_TFM_MODE_ECB; | 380 | tfm->crt_cipher.cit_mode = mode ? mode : CRYPTO_TFM_MODE_ECB; |
382 | if (flags & CRYPTO_TFM_REQ_WEAK_KEY) | ||
383 | tfm->crt_flags = CRYPTO_TFM_REQ_WEAK_KEY; | ||
384 | |||
385 | return 0; | 381 | return 0; |
386 | } | 382 | } |
387 | 383 | ||
diff --git a/crypto/internal.h b/crypto/internal.h index 37515beafc8c..37aa652ce5ce 100644 --- a/crypto/internal.h +++ b/crypto/internal.h | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/interrupt.h> | 17 | #include <linux/interrupt.h> |
18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
19 | #include <linux/kernel.h> | 19 | #include <linux/kernel.h> |
20 | #include <linux/slab.h> | ||
20 | #include <asm/kmap_types.h> | 21 | #include <asm/kmap_types.h> |
21 | 22 | ||
22 | extern enum km_type crypto_km_types[]; | 23 | extern enum km_type crypto_km_types[]; |
@@ -38,7 +39,7 @@ static inline void crypto_kunmap(void *vaddr, int out) | |||
38 | 39 | ||
39 | static inline void crypto_yield(struct crypto_tfm *tfm) | 40 | static inline void crypto_yield(struct crypto_tfm *tfm) |
40 | { | 41 | { |
41 | if (!in_atomic()) | 42 | if (tfm->crt_flags & CRYPTO_TFM_REQ_MAY_SLEEP) |
42 | cond_resched(); | 43 | cond_resched(); |
43 | } | 44 | } |
44 | 45 | ||
diff --git a/include/linux/crypto.h b/include/linux/crypto.h index 5e2bcc636a02..3c89df6e7768 100644 --- a/include/linux/crypto.h +++ b/include/linux/crypto.h | |||
@@ -45,6 +45,7 @@ | |||
45 | #define CRYPTO_TFM_MODE_CTR 0x00000008 | 45 | #define CRYPTO_TFM_MODE_CTR 0x00000008 |
46 | 46 | ||
47 | #define CRYPTO_TFM_REQ_WEAK_KEY 0x00000100 | 47 | #define CRYPTO_TFM_REQ_WEAK_KEY 0x00000100 |
48 | #define CRYPTO_TFM_REQ_MAY_SLEEP 0x00000200 | ||
48 | #define CRYPTO_TFM_RES_WEAK_KEY 0x00100000 | 49 | #define CRYPTO_TFM_RES_WEAK_KEY 0x00100000 |
49 | #define CRYPTO_TFM_RES_BAD_KEY_LEN 0x00200000 | 50 | #define CRYPTO_TFM_RES_BAD_KEY_LEN 0x00200000 |
50 | #define CRYPTO_TFM_RES_BAD_KEY_SCHED 0x00400000 | 51 | #define CRYPTO_TFM_RES_BAD_KEY_SCHED 0x00400000 |