summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Biggers <ebiggers@google.com>2019-01-19 01:48:00 -0500
committerHerbert Xu <herbert@gondor.apana.org.au>2019-01-25 05:41:52 -0500
commit231baecdef7a906579925ccf1bd45aa734f32320 (patch)
treed445c32fbb19c327331c8cc3d254d72a96ffa919
parent37ebffff65b2321a9b51ae928851330154358f1d (diff)
crypto: clarify name of WEAK_KEY request flag
CRYPTO_TFM_REQ_WEAK_KEY confuses newcomers to the crypto API because it sounds like it is requesting a weak key. Actually, it is requesting that weak keys be forbidden (for algorithms that have the notion of "weak keys"; currently only DES and XTS do). Also it is only one letter away from CRYPTO_TFM_RES_WEAK_KEY, with which it can be easily confused. (This in fact happened in the UX500 driver, though just in some debugging messages.) Therefore, make the intent clear by renaming it to CRYPTO_TFM_REQ_FORBID_WEAK_KEYS. Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r--arch/s390/crypto/des_s390.c4
-rw-r--r--arch/sparc/crypto/des_glue.c4
-rw-r--r--crypto/des_generic.c4
-rw-r--r--crypto/testmgr.c14
-rw-r--r--crypto/testmgr.h4
-rw-r--r--drivers/crypto/atmel-tdes.c2
-rw-r--r--drivers/crypto/bcm/cipher.c4
-rw-r--r--drivers/crypto/ccp/ccp-crypto-des3.c2
-rw-r--r--drivers/crypto/ccree/cc_cipher.c3
-rw-r--r--drivers/crypto/hifn_795x.c3
-rw-r--r--drivers/crypto/inside-secure/safexcel_cipher.c2
-rw-r--r--drivers/crypto/ixp4xx_crypto.c4
-rw-r--r--drivers/crypto/marvell/cipher.c2
-rw-r--r--drivers/crypto/n2_core.c2
-rw-r--r--drivers/crypto/omap-des.c2
-rw-r--r--drivers/crypto/picoxcell_crypto.c3
-rw-r--r--drivers/crypto/qce/ablkcipher.c4
-rw-r--r--drivers/crypto/rockchip/rk3288_crypto_ablkcipher.c2
-rw-r--r--drivers/crypto/sunxi-ss/sun4i-ss-cipher.c2
-rw-r--r--drivers/crypto/talitos.c2
-rw-r--r--drivers/crypto/ux500/cryp/cryp_core.c20
-rw-r--r--fs/crypto/keyinfo.c4
-rw-r--r--fs/ecryptfs/crypto.c5
-rw-r--r--include/crypto/xts.h4
-rw-r--r--include/linux/crypto.h2
25 files changed, 55 insertions, 49 deletions
diff --git a/arch/s390/crypto/des_s390.c b/arch/s390/crypto/des_s390.c
index 5346b5a80bb6..0d15383d0ff1 100644
--- a/arch/s390/crypto/des_s390.c
+++ b/arch/s390/crypto/des_s390.c
@@ -38,7 +38,7 @@ static int des_setkey(struct crypto_tfm *tfm, const u8 *key,
38 38
39 /* check for weak keys */ 39 /* check for weak keys */
40 if (!des_ekey(tmp, key) && 40 if (!des_ekey(tmp, key) &&
41 (tfm->crt_flags & CRYPTO_TFM_REQ_WEAK_KEY)) { 41 (tfm->crt_flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) {
42 tfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY; 42 tfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY;
43 return -EINVAL; 43 return -EINVAL;
44 } 44 }
@@ -228,7 +228,7 @@ static int des3_setkey(struct crypto_tfm *tfm, const u8 *key,
228 if (!(crypto_memneq(key, &key[DES_KEY_SIZE], DES_KEY_SIZE) && 228 if (!(crypto_memneq(key, &key[DES_KEY_SIZE], DES_KEY_SIZE) &&
229 crypto_memneq(&key[DES_KEY_SIZE], &key[DES_KEY_SIZE * 2], 229 crypto_memneq(&key[DES_KEY_SIZE], &key[DES_KEY_SIZE * 2],
230 DES_KEY_SIZE)) && 230 DES_KEY_SIZE)) &&
231 (tfm->crt_flags & CRYPTO_TFM_REQ_WEAK_KEY)) { 231 (tfm->crt_flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) {
232 tfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY; 232 tfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY;
233 return -EINVAL; 233 return -EINVAL;
234 } 234 }
diff --git a/arch/sparc/crypto/des_glue.c b/arch/sparc/crypto/des_glue.c
index 56499ea39fd3..4884315daff4 100644
--- a/arch/sparc/crypto/des_glue.c
+++ b/arch/sparc/crypto/des_glue.c
@@ -53,7 +53,7 @@ static int des_set_key(struct crypto_tfm *tfm, const u8 *key,
53 * weak key detection code. 53 * weak key detection code.
54 */ 54 */
55 ret = des_ekey(tmp, key); 55 ret = des_ekey(tmp, key);
56 if (unlikely(ret == 0) && (*flags & CRYPTO_TFM_REQ_WEAK_KEY)) { 56 if (unlikely(ret == 0) && (*flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) {
57 *flags |= CRYPTO_TFM_RES_WEAK_KEY; 57 *flags |= CRYPTO_TFM_RES_WEAK_KEY;
58 return -EINVAL; 58 return -EINVAL;
59 } 59 }
@@ -209,7 +209,7 @@ static int des3_ede_set_key(struct crypto_tfm *tfm, const u8 *key,
209 209
210 if (unlikely(!((K[0] ^ K[2]) | (K[1] ^ K[3])) || 210 if (unlikely(!((K[0] ^ K[2]) | (K[1] ^ K[3])) ||
211 !((K[2] ^ K[4]) | (K[3] ^ K[5]))) && 211 !((K[2] ^ K[4]) | (K[3] ^ K[5]))) &&
212 (*flags & CRYPTO_TFM_REQ_WEAK_KEY)) { 212 (*flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) {
213 *flags |= CRYPTO_TFM_RES_WEAK_KEY; 213 *flags |= CRYPTO_TFM_RES_WEAK_KEY;
214 return -EINVAL; 214 return -EINVAL;
215 } 215 }
diff --git a/crypto/des_generic.c b/crypto/des_generic.c
index a71720544d11..1e6621665dd9 100644
--- a/crypto/des_generic.c
+++ b/crypto/des_generic.c
@@ -789,7 +789,7 @@ static int des_setkey(struct crypto_tfm *tfm, const u8 *key,
789 /* Expand to tmp */ 789 /* Expand to tmp */
790 ret = des_ekey(tmp, key); 790 ret = des_ekey(tmp, key);
791 791
792 if (unlikely(ret == 0) && (*flags & CRYPTO_TFM_REQ_WEAK_KEY)) { 792 if (unlikely(ret == 0) && (*flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) {
793 *flags |= CRYPTO_TFM_RES_WEAK_KEY; 793 *flags |= CRYPTO_TFM_RES_WEAK_KEY;
794 return -EINVAL; 794 return -EINVAL;
795 } 795 }
@@ -866,7 +866,7 @@ int __des3_ede_setkey(u32 *expkey, u32 *flags, const u8 *key,
866 866
867 if (unlikely(!((K[0] ^ K[2]) | (K[1] ^ K[3])) || 867 if (unlikely(!((K[0] ^ K[2]) | (K[1] ^ K[3])) ||
868 !((K[2] ^ K[4]) | (K[3] ^ K[5]))) && 868 !((K[2] ^ K[4]) | (K[3] ^ K[5]))) &&
869 (*flags & CRYPTO_TFM_REQ_WEAK_KEY)) { 869 (*flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) {
870 *flags |= CRYPTO_TFM_RES_WEAK_KEY; 870 *flags |= CRYPTO_TFM_RES_WEAK_KEY;
871 return -EINVAL; 871 return -EINVAL;
872 } 872 }
diff --git a/crypto/testmgr.c b/crypto/testmgr.c
index e4f3f5f688e7..4ac3d22256c3 100644
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
@@ -706,7 +706,8 @@ static int __test_aead(struct crypto_aead *tfm, int enc,
706 706
707 crypto_aead_clear_flags(tfm, ~0); 707 crypto_aead_clear_flags(tfm, ~0);
708 if (template[i].wk) 708 if (template[i].wk)
709 crypto_aead_set_flags(tfm, CRYPTO_TFM_REQ_WEAK_KEY); 709 crypto_aead_set_flags(tfm,
710 CRYPTO_TFM_REQ_FORBID_WEAK_KEYS);
710 711
711 if (template[i].klen > MAX_KEYLEN) { 712 if (template[i].klen > MAX_KEYLEN) {
712 pr_err("alg: aead%s: setkey failed on test %d for %s: key size %d > %d\n", 713 pr_err("alg: aead%s: setkey failed on test %d for %s: key size %d > %d\n",
@@ -820,7 +821,8 @@ static int __test_aead(struct crypto_aead *tfm, int enc,
820 821
821 crypto_aead_clear_flags(tfm, ~0); 822 crypto_aead_clear_flags(tfm, ~0);
822 if (template[i].wk) 823 if (template[i].wk)
823 crypto_aead_set_flags(tfm, CRYPTO_TFM_REQ_WEAK_KEY); 824 crypto_aead_set_flags(tfm,
825 CRYPTO_TFM_REQ_FORBID_WEAK_KEYS);
824 if (template[i].klen > MAX_KEYLEN) { 826 if (template[i].klen > MAX_KEYLEN) {
825 pr_err("alg: aead%s: setkey failed on test %d for %s: key size %d > %d\n", 827 pr_err("alg: aead%s: setkey failed on test %d for %s: key size %d > %d\n",
826 d, j, algo, template[i].klen, MAX_KEYLEN); 828 d, j, algo, template[i].klen, MAX_KEYLEN);
@@ -1078,7 +1080,7 @@ static int test_cipher(struct crypto_cipher *tfm, int enc,
1078 1080
1079 crypto_cipher_clear_flags(tfm, ~0); 1081 crypto_cipher_clear_flags(tfm, ~0);
1080 if (template[i].wk) 1082 if (template[i].wk)
1081 crypto_cipher_set_flags(tfm, CRYPTO_TFM_REQ_WEAK_KEY); 1083 crypto_cipher_set_flags(tfm, CRYPTO_TFM_REQ_FORBID_WEAK_KEYS);
1082 1084
1083 ret = crypto_cipher_setkey(tfm, template[i].key, 1085 ret = crypto_cipher_setkey(tfm, template[i].key,
1084 template[i].klen); 1086 template[i].klen);
@@ -1194,8 +1196,7 @@ static int __test_skcipher(struct crypto_skcipher *tfm, int enc,
1194 1196
1195 crypto_skcipher_clear_flags(tfm, ~0); 1197 crypto_skcipher_clear_flags(tfm, ~0);
1196 if (template[i].wk) 1198 if (template[i].wk)
1197 crypto_skcipher_set_flags(tfm, 1199 crypto_skcipher_set_flags(tfm, CRYPTO_TFM_REQ_FORBID_WEAK_KEYS);
1198 CRYPTO_TFM_REQ_WEAK_KEY);
1199 1200
1200 ret = crypto_skcipher_setkey(tfm, template[i].key, 1201 ret = crypto_skcipher_setkey(tfm, template[i].key,
1201 template[i].klen); 1202 template[i].klen);
@@ -1265,8 +1266,7 @@ static int __test_skcipher(struct crypto_skcipher *tfm, int enc,
1265 j++; 1266 j++;
1266 crypto_skcipher_clear_flags(tfm, ~0); 1267 crypto_skcipher_clear_flags(tfm, ~0);
1267 if (template[i].wk) 1268 if (template[i].wk)
1268 crypto_skcipher_set_flags(tfm, 1269 crypto_skcipher_set_flags(tfm, CRYPTO_TFM_REQ_FORBID_WEAK_KEYS);
1269 CRYPTO_TFM_REQ_WEAK_KEY);
1270 1270
1271 ret = crypto_skcipher_setkey(tfm, template[i].key, 1271 ret = crypto_skcipher_setkey(tfm, template[i].key,
1272 template[i].klen); 1272 template[i].klen);
diff --git a/crypto/testmgr.h b/crypto/testmgr.h
index 95297240b0f1..d8f6035c7ff2 100644
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
@@ -50,7 +50,7 @@ struct hash_testvec {
50 * @ctext: Pointer to ciphertext 50 * @ctext: Pointer to ciphertext
51 * @len: Length of @ptext and @ctext in bytes 51 * @len: Length of @ptext and @ctext in bytes
52 * @fail: If set to one, the test need to fail 52 * @fail: If set to one, the test need to fail
53 * @wk: Does the test need CRYPTO_TFM_REQ_WEAK_KEY 53 * @wk: Does the test need CRYPTO_TFM_REQ_FORBID_WEAK_KEYS?
54 * ( e.g. test needs to fail due to a weak key ) 54 * ( e.g. test needs to fail due to a weak key )
55 * @np: numbers of SG to distribute data in (from 1 to MAX_TAP) 55 * @np: numbers of SG to distribute data in (from 1 to MAX_TAP)
56 * @tap: How to distribute data in @np SGs 56 * @tap: How to distribute data in @np SGs
@@ -91,7 +91,7 @@ struct cipher_testvec {
91 * @anp: Numbers of SG to distribute assoc data in 91 * @anp: Numbers of SG to distribute assoc data in
92 * @fail: setkey() failure expected? 92 * @fail: setkey() failure expected?
93 * @novrfy: Decryption verification failure expected? 93 * @novrfy: Decryption verification failure expected?
94 * @wk: Does the test need CRYPTO_TFM_REQ_WEAK_KEY? 94 * @wk: Does the test need CRYPTO_TFM_REQ_FORBID_WEAK_KEYS?
95 * (e.g. setkey() needs to fail due to a weak key) 95 * (e.g. setkey() needs to fail due to a weak key)
96 * @klen: Length of @key in bytes 96 * @klen: Length of @key in bytes
97 * @plen: Length of @ptext in bytes 97 * @plen: Length of @ptext in bytes
diff --git a/drivers/crypto/atmel-tdes.c b/drivers/crypto/atmel-tdes.c
index 438e1ffb2ec0..65bf1a299562 100644
--- a/drivers/crypto/atmel-tdes.c
+++ b/drivers/crypto/atmel-tdes.c
@@ -785,7 +785,7 @@ static int atmel_des_setkey(struct crypto_ablkcipher *tfm, const u8 *key,
785 } 785 }
786 786
787 err = des_ekey(tmp, key); 787 err = des_ekey(tmp, key);
788 if (err == 0 && (ctfm->crt_flags & CRYPTO_TFM_REQ_WEAK_KEY)) { 788 if (err == 0 && (ctfm->crt_flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) {
789 ctfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY; 789 ctfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY;
790 return -EINVAL; 790 return -EINVAL;
791 } 791 }
diff --git a/drivers/crypto/bcm/cipher.c b/drivers/crypto/bcm/cipher.c
index 2099d7bcfd44..28f592f7e1b7 100644
--- a/drivers/crypto/bcm/cipher.c
+++ b/drivers/crypto/bcm/cipher.c
@@ -1818,7 +1818,7 @@ static int des_setkey(struct crypto_ablkcipher *cipher, const u8 *key,
1818 if (keylen == DES_KEY_SIZE) { 1818 if (keylen == DES_KEY_SIZE) {
1819 if (des_ekey(tmp, key) == 0) { 1819 if (des_ekey(tmp, key) == 0) {
1820 if (crypto_ablkcipher_get_flags(cipher) & 1820 if (crypto_ablkcipher_get_flags(cipher) &
1821 CRYPTO_TFM_REQ_WEAK_KEY) { 1821 CRYPTO_TFM_REQ_FORBID_WEAK_KEYS) {
1822 u32 flags = CRYPTO_TFM_RES_WEAK_KEY; 1822 u32 flags = CRYPTO_TFM_RES_WEAK_KEY;
1823 1823
1824 crypto_ablkcipher_set_flags(cipher, flags); 1824 crypto_ablkcipher_set_flags(cipher, flags);
@@ -2872,7 +2872,7 @@ static int aead_authenc_setkey(struct crypto_aead *cipher,
2872 2872
2873 if (des_ekey(tmp, keys.enckey) == 0) { 2873 if (des_ekey(tmp, keys.enckey) == 0) {
2874 if (crypto_aead_get_flags(cipher) & 2874 if (crypto_aead_get_flags(cipher) &
2875 CRYPTO_TFM_REQ_WEAK_KEY) { 2875 CRYPTO_TFM_REQ_FORBID_WEAK_KEYS) {
2876 crypto_aead_set_flags(cipher, flags); 2876 crypto_aead_set_flags(cipher, flags);
2877 return -EINVAL; 2877 return -EINVAL;
2878 } 2878 }
diff --git a/drivers/crypto/ccp/ccp-crypto-des3.c b/drivers/crypto/ccp/ccp-crypto-des3.c
index ae87b741f9d5..c2ff551d215b 100644
--- a/drivers/crypto/ccp/ccp-crypto-des3.c
+++ b/drivers/crypto/ccp/ccp-crypto-des3.c
@@ -57,7 +57,7 @@ static int ccp_des3_setkey(struct crypto_ablkcipher *tfm, const u8 *key,
57 57
58 if (unlikely(!((K[0] ^ K[2]) | (K[1] ^ K[3])) || 58 if (unlikely(!((K[0] ^ K[2]) | (K[1] ^ K[3])) ||
59 !((K[2] ^ K[4]) | (K[3] ^ K[5]))) && 59 !((K[2] ^ K[4]) | (K[3] ^ K[5]))) &&
60 (*flags & CRYPTO_TFM_REQ_WEAK_KEY)) { 60 (*flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) {
61 *flags |= CRYPTO_TFM_RES_WEAK_KEY; 61 *flags |= CRYPTO_TFM_RES_WEAK_KEY;
62 return -EINVAL; 62 return -EINVAL;
63 } 63 }
diff --git a/drivers/crypto/ccree/cc_cipher.c b/drivers/crypto/ccree/cc_cipher.c
index e202d7c7ea00..5e3361a363b5 100644
--- a/drivers/crypto/ccree/cc_cipher.c
+++ b/drivers/crypto/ccree/cc_cipher.c
@@ -352,7 +352,8 @@ static int cc_cipher_setkey(struct crypto_skcipher *sktfm, const u8 *key,
352 dev_dbg(dev, "weak 3DES key"); 352 dev_dbg(dev, "weak 3DES key");
353 return -EINVAL; 353 return -EINVAL;
354 } else if (!des_ekey(tmp, key) && 354 } else if (!des_ekey(tmp, key) &&
355 (crypto_tfm_get_flags(tfm) & CRYPTO_TFM_REQ_WEAK_KEY)) { 355 (crypto_tfm_get_flags(tfm) &
356 CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) {
356 tfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY; 357 tfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY;
357 dev_dbg(dev, "weak DES key"); 358 dev_dbg(dev, "weak DES key");
358 return -EINVAL; 359 return -EINVAL;
diff --git a/drivers/crypto/hifn_795x.c b/drivers/crypto/hifn_795x.c
index a5a36fe7bf2c..dad212cabe63 100644
--- a/drivers/crypto/hifn_795x.c
+++ b/drivers/crypto/hifn_795x.c
@@ -1961,7 +1961,8 @@ static int hifn_setkey(struct crypto_ablkcipher *cipher, const u8 *key,
1961 u32 tmp[DES_EXPKEY_WORDS]; 1961 u32 tmp[DES_EXPKEY_WORDS];
1962 int ret = des_ekey(tmp, key); 1962 int ret = des_ekey(tmp, key);
1963 1963
1964 if (unlikely(ret == 0) && (tfm->crt_flags & CRYPTO_TFM_REQ_WEAK_KEY)) { 1964 if (unlikely(ret == 0) &&
1965 (tfm->crt_flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) {
1965 tfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY; 1966 tfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY;
1966 return -EINVAL; 1967 return -EINVAL;
1967 } 1968 }
diff --git a/drivers/crypto/inside-secure/safexcel_cipher.c b/drivers/crypto/inside-secure/safexcel_cipher.c
index d531c14020dc..7ef30a98cb24 100644
--- a/drivers/crypto/inside-secure/safexcel_cipher.c
+++ b/drivers/crypto/inside-secure/safexcel_cipher.c
@@ -940,7 +940,7 @@ static int safexcel_des_setkey(struct crypto_skcipher *ctfm, const u8 *key,
940 } 940 }
941 941
942 ret = des_ekey(tmp, key); 942 ret = des_ekey(tmp, key);
943 if (!ret && (tfm->crt_flags & CRYPTO_TFM_REQ_WEAK_KEY)) { 943 if (!ret && (tfm->crt_flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) {
944 tfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY; 944 tfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY;
945 return -EINVAL; 945 return -EINVAL;
946 } 946 }
diff --git a/drivers/crypto/ixp4xx_crypto.c b/drivers/crypto/ixp4xx_crypto.c
index 19fba998b86b..95c1af227bd5 100644
--- a/drivers/crypto/ixp4xx_crypto.c
+++ b/drivers/crypto/ixp4xx_crypto.c
@@ -847,7 +847,7 @@ static int ablk_setkey(struct crypto_ablkcipher *tfm, const u8 *key,
847 goto out; 847 goto out;
848 848
849 if (*flags & CRYPTO_TFM_RES_WEAK_KEY) { 849 if (*flags & CRYPTO_TFM_RES_WEAK_KEY) {
850 if (*flags & CRYPTO_TFM_REQ_WEAK_KEY) { 850 if (*flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS) {
851 ret = -EINVAL; 851 ret = -EINVAL;
852 } else { 852 } else {
853 *flags &= ~CRYPTO_TFM_RES_WEAK_KEY; 853 *flags &= ~CRYPTO_TFM_RES_WEAK_KEY;
@@ -1125,7 +1125,7 @@ static int aead_setup(struct crypto_aead *tfm, unsigned int authsize)
1125 goto out; 1125 goto out;
1126 1126
1127 if (*flags & CRYPTO_TFM_RES_WEAK_KEY) { 1127 if (*flags & CRYPTO_TFM_RES_WEAK_KEY) {
1128 if (*flags & CRYPTO_TFM_REQ_WEAK_KEY) { 1128 if (*flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS) {
1129 ret = -EINVAL; 1129 ret = -EINVAL;
1130 goto out; 1130 goto out;
1131 } else { 1131 } else {
diff --git a/drivers/crypto/marvell/cipher.c b/drivers/crypto/marvell/cipher.c
index 0ae84ec9e21c..066830dcc53e 100644
--- a/drivers/crypto/marvell/cipher.c
+++ b/drivers/crypto/marvell/cipher.c
@@ -286,7 +286,7 @@ static int mv_cesa_des_setkey(struct crypto_skcipher *cipher, const u8 *key,
286 } 286 }
287 287
288 ret = des_ekey(tmp, key); 288 ret = des_ekey(tmp, key);
289 if (!ret && (tfm->crt_flags & CRYPTO_TFM_REQ_WEAK_KEY)) { 289 if (!ret && (tfm->crt_flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) {
290 tfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY; 290 tfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY;
291 return -EINVAL; 291 return -EINVAL;
292 } 292 }
diff --git a/drivers/crypto/n2_core.c b/drivers/crypto/n2_core.c
index 55f34cfc43ff..9450c41211b2 100644
--- a/drivers/crypto/n2_core.c
+++ b/drivers/crypto/n2_core.c
@@ -772,7 +772,7 @@ static int n2_des_setkey(struct crypto_ablkcipher *cipher, const u8 *key,
772 } 772 }
773 773
774 err = des_ekey(tmp, key); 774 err = des_ekey(tmp, key);
775 if (err == 0 && (tfm->crt_flags & CRYPTO_TFM_REQ_WEAK_KEY)) { 775 if (err == 0 && (tfm->crt_flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) {
776 tfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY; 776 tfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY;
777 return -EINVAL; 777 return -EINVAL;
778 } 778 }
diff --git a/drivers/crypto/omap-des.c b/drivers/crypto/omap-des.c
index 6369019219d4..1ba2633e90d6 100644
--- a/drivers/crypto/omap-des.c
+++ b/drivers/crypto/omap-des.c
@@ -662,7 +662,7 @@ static int omap_des_setkey(struct crypto_ablkcipher *cipher, const u8 *key,
662 pr_debug("enter, keylen: %d\n", keylen); 662 pr_debug("enter, keylen: %d\n", keylen);
663 663
664 /* Do we need to test against weak key? */ 664 /* Do we need to test against weak key? */
665 if (tfm->crt_flags & CRYPTO_TFM_REQ_WEAK_KEY) { 665 if (tfm->crt_flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS) {
666 u32 tmp[DES_EXPKEY_WORDS]; 666 u32 tmp[DES_EXPKEY_WORDS];
667 int ret = des_ekey(tmp, key); 667 int ret = des_ekey(tmp, key);
668 668
diff --git a/drivers/crypto/picoxcell_crypto.c b/drivers/crypto/picoxcell_crypto.c
index 17068b55fea5..1b3acdeffede 100644
--- a/drivers/crypto/picoxcell_crypto.c
+++ b/drivers/crypto/picoxcell_crypto.c
@@ -759,7 +759,8 @@ static int spacc_des_setkey(struct crypto_ablkcipher *cipher, const u8 *key,
759 } 759 }
760 760
761 if (unlikely(!des_ekey(tmp, key)) && 761 if (unlikely(!des_ekey(tmp, key)) &&
762 (crypto_ablkcipher_get_flags(cipher) & CRYPTO_TFM_REQ_WEAK_KEY)) { 762 (crypto_ablkcipher_get_flags(cipher) &
763 CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) {
763 tfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY; 764 tfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY;
764 return -EINVAL; 765 return -EINVAL;
765 } 766 }
diff --git a/drivers/crypto/qce/ablkcipher.c b/drivers/crypto/qce/ablkcipher.c
index 25c13e26d012..154b6baa124e 100644
--- a/drivers/crypto/qce/ablkcipher.c
+++ b/drivers/crypto/qce/ablkcipher.c
@@ -180,8 +180,8 @@ static int qce_ablkcipher_setkey(struct crypto_ablkcipher *ablk, const u8 *key,
180 u32 tmp[DES_EXPKEY_WORDS]; 180 u32 tmp[DES_EXPKEY_WORDS];
181 181
182 ret = des_ekey(tmp, key); 182 ret = des_ekey(tmp, key);
183 if (!ret && crypto_ablkcipher_get_flags(ablk) & 183 if (!ret && (crypto_ablkcipher_get_flags(ablk) &
184 CRYPTO_TFM_REQ_WEAK_KEY) 184 CRYPTO_TFM_REQ_FORBID_WEAK_KEYS))
185 goto weakkey; 185 goto weakkey;
186 } 186 }
187 187
diff --git a/drivers/crypto/rockchip/rk3288_crypto_ablkcipher.c b/drivers/crypto/rockchip/rk3288_crypto_ablkcipher.c
index 639c15c5364b..87dd571466c1 100644
--- a/drivers/crypto/rockchip/rk3288_crypto_ablkcipher.c
+++ b/drivers/crypto/rockchip/rk3288_crypto_ablkcipher.c
@@ -60,7 +60,7 @@ static int rk_tdes_setkey(struct crypto_ablkcipher *cipher,
60 60
61 if (keylen == DES_KEY_SIZE) { 61 if (keylen == DES_KEY_SIZE) {
62 if (!des_ekey(tmp, key) && 62 if (!des_ekey(tmp, key) &&
63 (tfm->crt_flags & CRYPTO_TFM_REQ_WEAK_KEY)) { 63 (tfm->crt_flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) {
64 tfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY; 64 tfm->crt_flags |= CRYPTO_TFM_RES_WEAK_KEY;
65 return -EINVAL; 65 return -EINVAL;
66 } 66 }
diff --git a/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c b/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c
index 5cf64746731a..54fd714d53ca 100644
--- a/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c
+++ b/drivers/crypto/sunxi-ss/sun4i-ss-cipher.c
@@ -517,7 +517,7 @@ int sun4i_ss_des_setkey(struct crypto_skcipher *tfm, const u8 *key,
517 flags = crypto_skcipher_get_flags(tfm); 517 flags = crypto_skcipher_get_flags(tfm);
518 518
519 ret = des_ekey(tmp, key); 519 ret = des_ekey(tmp, key);
520 if (unlikely(!ret) && (flags & CRYPTO_TFM_REQ_WEAK_KEY)) { 520 if (unlikely(!ret) && (flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) {
521 crypto_skcipher_set_flags(tfm, CRYPTO_TFM_RES_WEAK_KEY); 521 crypto_skcipher_set_flags(tfm, CRYPTO_TFM_RES_WEAK_KEY);
522 dev_dbg(ss->dev, "Weak key %u\n", keylen); 522 dev_dbg(ss->dev, "Weak key %u\n", keylen);
523 return -EINVAL; 523 return -EINVAL;
diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
index f8e2c5c3f4eb..de78b54bcfb1 100644
--- a/drivers/crypto/talitos.c
+++ b/drivers/crypto/talitos.c
@@ -1535,7 +1535,7 @@ static int ablkcipher_setkey(struct crypto_ablkcipher *cipher,
1535 } 1535 }
1536 1536
1537 if (unlikely(crypto_ablkcipher_get_flags(cipher) & 1537 if (unlikely(crypto_ablkcipher_get_flags(cipher) &
1538 CRYPTO_TFM_REQ_WEAK_KEY) && 1538 CRYPTO_TFM_REQ_FORBID_WEAK_KEYS) &&
1539 !des_ekey(tmp, key)) { 1539 !des_ekey(tmp, key)) {
1540 crypto_ablkcipher_set_flags(cipher, CRYPTO_TFM_RES_WEAK_KEY); 1540 crypto_ablkcipher_set_flags(cipher, CRYPTO_TFM_RES_WEAK_KEY);
1541 return -EINVAL; 1541 return -EINVAL;
diff --git a/drivers/crypto/ux500/cryp/cryp_core.c b/drivers/crypto/ux500/cryp/cryp_core.c
index db94f89d8d11..3235611928f2 100644
--- a/drivers/crypto/ux500/cryp/cryp_core.c
+++ b/drivers/crypto/ux500/cryp/cryp_core.c
@@ -1000,10 +1000,11 @@ static int des_ablkcipher_setkey(struct crypto_ablkcipher *cipher,
1000 } 1000 }
1001 1001
1002 ret = des_ekey(tmp, key); 1002 ret = des_ekey(tmp, key);
1003 if (unlikely(ret == 0) && (*flags & CRYPTO_TFM_REQ_WEAK_KEY)) { 1003 if (unlikely(ret == 0) &&
1004 (*flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) {
1004 *flags |= CRYPTO_TFM_RES_WEAK_KEY; 1005 *flags |= CRYPTO_TFM_RES_WEAK_KEY;
1005 pr_debug(DEV_DBG_NAME " [%s]: CRYPTO_TFM_REQ_WEAK_KEY", 1006 pr_debug(DEV_DBG_NAME " [%s]: CRYPTO_TFM_RES_WEAK_KEY",
1006 __func__); 1007 __func__);
1007 return -EINVAL; 1008 return -EINVAL;
1008 } 1009 }
1009 1010
@@ -1034,18 +1035,19 @@ static int des3_ablkcipher_setkey(struct crypto_ablkcipher *cipher,
1034 /* Checking key interdependency for weak key detection. */ 1035 /* Checking key interdependency for weak key detection. */
1035 if (unlikely(!((K[0] ^ K[2]) | (K[1] ^ K[3])) || 1036 if (unlikely(!((K[0] ^ K[2]) | (K[1] ^ K[3])) ||
1036 !((K[2] ^ K[4]) | (K[3] ^ K[5]))) && 1037 !((K[2] ^ K[4]) | (K[3] ^ K[5]))) &&
1037 (*flags & CRYPTO_TFM_REQ_WEAK_KEY)) { 1038 (*flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) {
1038 *flags |= CRYPTO_TFM_RES_WEAK_KEY; 1039 *flags |= CRYPTO_TFM_RES_WEAK_KEY;
1039 pr_debug(DEV_DBG_NAME " [%s]: CRYPTO_TFM_REQ_WEAK_KEY", 1040 pr_debug(DEV_DBG_NAME " [%s]: CRYPTO_TFM_RES_WEAK_KEY",
1040 __func__); 1041 __func__);
1041 return -EINVAL; 1042 return -EINVAL;
1042 } 1043 }
1043 for (i = 0; i < 3; i++) { 1044 for (i = 0; i < 3; i++) {
1044 ret = des_ekey(tmp, key + i*DES_KEY_SIZE); 1045 ret = des_ekey(tmp, key + i*DES_KEY_SIZE);
1045 if (unlikely(ret == 0) && (*flags & CRYPTO_TFM_REQ_WEAK_KEY)) { 1046 if (unlikely(ret == 0) &&
1047 (*flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) {
1046 *flags |= CRYPTO_TFM_RES_WEAK_KEY; 1048 *flags |= CRYPTO_TFM_RES_WEAK_KEY;
1047 pr_debug(DEV_DBG_NAME " [%s]: " 1049 pr_debug(DEV_DBG_NAME " [%s]: CRYPTO_TFM_RES_WEAK_KEY",
1048 "CRYPTO_TFM_REQ_WEAK_KEY", __func__); 1050 __func__);
1049 return -EINVAL; 1051 return -EINVAL;
1050 } 1052 }
1051 } 1053 }
diff --git a/fs/crypto/keyinfo.c b/fs/crypto/keyinfo.c
index 1e11a683f63d..322ce9686bdb 100644
--- a/fs/crypto/keyinfo.c
+++ b/fs/crypto/keyinfo.c
@@ -47,7 +47,7 @@ static int derive_key_aes(const u8 *master_key,
47 tfm = NULL; 47 tfm = NULL;
48 goto out; 48 goto out;
49 } 49 }
50 crypto_skcipher_set_flags(tfm, CRYPTO_TFM_REQ_WEAK_KEY); 50 crypto_skcipher_set_flags(tfm, CRYPTO_TFM_REQ_FORBID_WEAK_KEYS);
51 req = skcipher_request_alloc(tfm, GFP_NOFS); 51 req = skcipher_request_alloc(tfm, GFP_NOFS);
52 if (!req) { 52 if (!req) {
53 res = -ENOMEM; 53 res = -ENOMEM;
@@ -257,7 +257,7 @@ allocate_skcipher_for_mode(struct fscrypt_mode *mode, const u8 *raw_key,
257 mode->friendly_name, 257 mode->friendly_name,
258 crypto_skcipher_alg(tfm)->base.cra_driver_name); 258 crypto_skcipher_alg(tfm)->base.cra_driver_name);
259 } 259 }
260 crypto_skcipher_set_flags(tfm, CRYPTO_TFM_REQ_WEAK_KEY); 260 crypto_skcipher_set_flags(tfm, CRYPTO_TFM_REQ_FORBID_WEAK_KEYS);
261 err = crypto_skcipher_setkey(tfm, raw_key, mode->keysize); 261 err = crypto_skcipher_setkey(tfm, raw_key, mode->keysize);
262 if (err) 262 if (err)
263 goto err_free_tfm; 263 goto err_free_tfm;
diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c
index 4dd842f72846..f664da55234e 100644
--- a/fs/ecryptfs/crypto.c
+++ b/fs/ecryptfs/crypto.c
@@ -610,7 +610,8 @@ int ecryptfs_init_crypt_ctx(struct ecryptfs_crypt_stat *crypt_stat)
610 full_alg_name); 610 full_alg_name);
611 goto out_free; 611 goto out_free;
612 } 612 }
613 crypto_skcipher_set_flags(crypt_stat->tfm, CRYPTO_TFM_REQ_WEAK_KEY); 613 crypto_skcipher_set_flags(crypt_stat->tfm,
614 CRYPTO_TFM_REQ_FORBID_WEAK_KEYS);
614 rc = 0; 615 rc = 0;
615out_free: 616out_free:
616 kfree(full_alg_name); 617 kfree(full_alg_name);
@@ -1590,7 +1591,7 @@ ecryptfs_process_key_cipher(struct crypto_skcipher **key_tfm,
1590 "[%s]; rc = [%d]\n", full_alg_name, rc); 1591 "[%s]; rc = [%d]\n", full_alg_name, rc);
1591 goto out; 1592 goto out;
1592 } 1593 }
1593 crypto_skcipher_set_flags(*key_tfm, CRYPTO_TFM_REQ_WEAK_KEY); 1594 crypto_skcipher_set_flags(*key_tfm, CRYPTO_TFM_REQ_FORBID_WEAK_KEYS);
1594 if (*key_size == 0) 1595 if (*key_size == 0)
1595 *key_size = crypto_skcipher_default_keysize(*key_tfm); 1596 *key_size = crypto_skcipher_default_keysize(*key_tfm);
1596 get_random_bytes(dummy_key, *key_size); 1597 get_random_bytes(dummy_key, *key_size);
diff --git a/include/crypto/xts.h b/include/crypto/xts.h
index 34d94c95445a..75fd96ff976b 100644
--- a/include/crypto/xts.h
+++ b/include/crypto/xts.h
@@ -47,8 +47,8 @@ static inline int xts_verify_key(struct crypto_skcipher *tfm,
47 } 47 }
48 48
49 /* ensure that the AES and tweak key are not identical */ 49 /* ensure that the AES and tweak key are not identical */
50 if ((fips_enabled || crypto_skcipher_get_flags(tfm) & 50 if ((fips_enabled || (crypto_skcipher_get_flags(tfm) &
51 CRYPTO_TFM_REQ_WEAK_KEY) && 51 CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) &&
52 !crypto_memneq(key, key + (keylen / 2), keylen / 2)) { 52 !crypto_memneq(key, key + (keylen / 2), keylen / 2)) {
53 crypto_skcipher_set_flags(tfm, CRYPTO_TFM_RES_WEAK_KEY); 53 crypto_skcipher_set_flags(tfm, CRYPTO_TFM_RES_WEAK_KEY);
54 return -EINVAL; 54 return -EINVAL;
diff --git a/include/linux/crypto.h b/include/linux/crypto.h
index c3c98a62e503..f2565a103158 100644
--- a/include/linux/crypto.h
+++ b/include/linux/crypto.h
@@ -118,7 +118,7 @@
118#define CRYPTO_TFM_REQ_MASK 0x000fff00 118#define CRYPTO_TFM_REQ_MASK 0x000fff00
119#define CRYPTO_TFM_RES_MASK 0xfff00000 119#define CRYPTO_TFM_RES_MASK 0xfff00000
120 120
121#define CRYPTO_TFM_REQ_WEAK_KEY 0x00000100 121#define CRYPTO_TFM_REQ_FORBID_WEAK_KEYS 0x00000100
122#define CRYPTO_TFM_REQ_MAY_SLEEP 0x00000200 122#define CRYPTO_TFM_REQ_MAY_SLEEP 0x00000200
123#define CRYPTO_TFM_REQ_MAY_BACKLOG 0x00000400 123#define CRYPTO_TFM_REQ_MAY_BACKLOG 0x00000400
124#define CRYPTO_TFM_RES_WEAK_KEY 0x00100000 124#define CRYPTO_TFM_RES_WEAK_KEY 0x00100000