else
                        err = 0;
        }
-
-       if (err) {
+       if (err)
                memset(dctx, 0, sizeof(*dctx));
-               crypto_tfm_set_flags(tfm, CRYPTO_TFM_RES_WEAK_KEY);
-       }
        return err;
 }
 
                else
                        err = 0;
        }
-
-       if (err) {
+       if (err)
                memset(dctx, 0, sizeof(*dctx));
-               crypto_tfm_set_flags(tfm, CRYPTO_TFM_RES_WEAK_KEY);
-       }
        return err;
 }
 
 
        u32 keylen_cfg = 0;
        struct ix_sa_dir *dir;
        struct ixp_ctx *ctx = crypto_tfm_ctx(tfm);
+       int err;
 
        dir = encrypt ? &ctx->encrypt : &ctx->decrypt;
        cinfo = dir->npe_ctx;
                }
                cipher_cfg |= keylen_cfg;
        } else {
-               crypto_des_verify_key(tfm, key);
+               err = crypto_des_verify_key(tfm, key);
+               if (err)
+                       return err;
        }
        /* write cfg word to cryptinfo */
        *(u32*)cinfo = cpu_to_be32(cipher_cfg);
                        unsigned int key_len)
 {
        struct ixp_ctx *ctx = crypto_skcipher_ctx(tfm);
-       u32 *flags = &tfm->base.crt_flags;
        int ret;
 
        init_completion(&ctx->completion);
        if (ret)
                goto out;
        ret = setup_cipher(&tfm->base, 1, key, key_len);
-       if (ret)
-               goto out;
-
-       if (*flags & CRYPTO_TFM_RES_WEAK_KEY) {
-               if (*flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS) {
-                       ret = -EINVAL;
-               } else {
-                       *flags &= ~CRYPTO_TFM_RES_WEAK_KEY;
-               }
-       }
 out:
        if (!atomic_dec_and_test(&ctx->configuring))
                wait_for_completion(&ctx->completion);
 static int aead_setup(struct crypto_aead *tfm, unsigned int authsize)
 {
        struct ixp_ctx *ctx = crypto_aead_ctx(tfm);
-       u32 *flags = &tfm->base.crt_flags;
        unsigned digest_len = crypto_aead_maxauthsize(tfm);
        int ret;
 
                goto out;
        ret = setup_auth(&tfm->base, 1, authsize,  ctx->authkey,
                        ctx->authkey_len, digest_len);
-       if (ret)
-               goto out;
-
-       if (*flags & CRYPTO_TFM_RES_WEAK_KEY) {
-               if (*flags & CRYPTO_TFM_REQ_FORBID_WEAK_KEYS) {
-                       ret = -EINVAL;
-                       goto out;
-               } else {
-                       *flags &= ~CRYPTO_TFM_RES_WEAK_KEY;
-               }
-       }
 out:
        if (!atomic_dec_and_test(&ctx->configuring))
                wait_for_completion(&ctx->completion);
 
                else
                        err = 0;
        }
-
-       if (err)
-               crypto_tfm_set_flags(tfm, CRYPTO_TFM_RES_WEAK_KEY);
-
        memzero_explicit(&tmp, sizeof(tmp));
        return err;
 }
 static inline int crypto_des3_ede_verify_key(struct crypto_tfm *tfm,
                                             const u8 *key)
 {
-       int err;
-
-       err = des3_ede_verify_key(key, DES3_EDE_KEY_SIZE,
-                                 crypto_tfm_get_flags(tfm) &
-                                 CRYPTO_TFM_REQ_FORBID_WEAK_KEYS);
-       if (err)
-               crypto_tfm_set_flags(tfm, CRYPTO_TFM_RES_WEAK_KEY);
-       return err;
+       return des3_ede_verify_key(key, DES3_EDE_KEY_SIZE,
+                                  crypto_tfm_get_flags(tfm) &
+                                  CRYPTO_TFM_REQ_FORBID_WEAK_KEYS);
 }
 
 static inline int verify_skcipher_des_key(struct crypto_skcipher *tfm,
 
 static inline int xts_check_key(struct crypto_tfm *tfm,
                                const u8 *key, unsigned int keylen)
 {
-       u32 *flags = &tfm->crt_flags;
-
        /*
         * key consists of keys of equal size concatenated, therefore
         * the length must be even.
                return -EINVAL;
 
        /* ensure that the AES and tweak key are not identical */
-       if (fips_enabled &&
-           !crypto_memneq(key, key + (keylen / 2), keylen / 2)) {
-               *flags |= CRYPTO_TFM_RES_WEAK_KEY;
+       if (fips_enabled && !crypto_memneq(key, key + (keylen / 2), keylen / 2))
                return -EINVAL;
-       }
 
        return 0;
 }
        /* ensure that the AES and tweak key are not identical */
        if ((fips_enabled || (crypto_skcipher_get_flags(tfm) &
                              CRYPTO_TFM_REQ_FORBID_WEAK_KEYS)) &&
-           !crypto_memneq(key, key + (keylen / 2), keylen / 2)) {
-               crypto_skcipher_set_flags(tfm, CRYPTO_TFM_RES_WEAK_KEY);
+           !crypto_memneq(key, key + (keylen / 2), keylen / 2))
                return -EINVAL;
-       }
 
        return 0;
 }
 
 #define CRYPTO_TFM_REQ_FORBID_WEAK_KEYS        0x00000100
 #define CRYPTO_TFM_REQ_MAY_SLEEP       0x00000200
 #define CRYPTO_TFM_REQ_MAY_BACKLOG     0x00000400
-#define CRYPTO_TFM_RES_WEAK_KEY                0x00100000
 
 /*
  * Miscellaneous stuff.