Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Linus Torvalds [Sun, 17 May 2009 22:48:05 +0000 (15:48 -0700)]
* git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:
  crypto: padlock - Revert aes-all alias to aes
  crypto: api - Fix algorithm module auto-loading
  crypto: eseqiv - Fix IV generation for sync algorithms
  crypto: ixp4xx - check firmware for crypto support

crypto/api.c
crypto/eseqiv.c
drivers/crypto/ixp4xx_crypto.c
drivers/crypto/padlock-aes.c

index 314dab9..fd2545d 100644 (file)
@@ -221,7 +221,8 @@ struct crypto_alg *crypto_larval_lookup(const char *name, u32 type, u32 mask)
 
                request_module(name);
 
-               if (!((type ^ CRYPTO_ALG_NEED_FALLBACK) & mask) &&
+               if (!((type ^ CRYPTO_ALG_NEED_FALLBACK) & mask &
+                     CRYPTO_ALG_NEED_FALLBACK) &&
                    snprintf(tmp, sizeof(tmp), "%s-all", name) < sizeof(tmp))
                        request_module(tmp);
 
index 2a342c8..3ca3b66 100644 (file)
@@ -153,7 +153,8 @@ static int eseqiv_givencrypt(struct skcipher_givcrypt_request *req)
        if (err)
                goto out;
 
-       eseqiv_complete2(req);
+       if (giv != req->giv)
+               eseqiv_complete2(req);
 
 out:
        return err;
index f9f05d7..6c6656d 100644 (file)
@@ -415,6 +415,7 @@ static void crypto_done_action(unsigned long arg)
 static int init_ixp_crypto(void)
 {
        int ret = -ENODEV;
+       u32 msg[2] = { 0, 0 };
 
        if (! ( ~(*IXP4XX_EXP_CFG2) & (IXP4XX_FEATURE_HASH |
                                IXP4XX_FEATURE_AES | IXP4XX_FEATURE_DES))) {
@@ -426,9 +427,35 @@ static int init_ixp_crypto(void)
                return ret;
 
        if (!npe_running(npe_c)) {
-               npe_load_firmware(npe_c, npe_name(npe_c), dev);
+               ret = npe_load_firmware(npe_c, npe_name(npe_c), dev);
+               if (ret) {
+                       return ret;
+               }
+               if (npe_recv_message(npe_c, msg, "STATUS_MSG"))
+                       goto npe_error;
+       } else {
+               if (npe_send_message(npe_c, msg, "STATUS_MSG"))
+                       goto npe_error;
+
+               if (npe_recv_message(npe_c, msg, "STATUS_MSG"))
+                       goto npe_error;
        }
 
+       switch ((msg[1]>>16) & 0xff) {
+       case 3:
+               printk(KERN_WARNING "Firmware of %s lacks AES support\n",
+                               npe_name(npe_c));
+               support_aes = 0;
+               break;
+       case 4:
+       case 5:
+               support_aes = 1;
+               break;
+       default:
+               printk(KERN_ERR "Firmware of %s lacks crypto support\n",
+                       npe_name(npe_c));
+               return -ENODEV;
+       }
        /* buffer_pool will also be used to sometimes store the hmac,
         * so assure it is large enough
         */
@@ -459,6 +486,10 @@ static int init_ixp_crypto(void)
 
        qmgr_enable_irq(RECV_QID);
        return 0;
+
+npe_error:
+       printk(KERN_ERR "%s not responding\n", npe_name(npe_c));
+       ret = -EIO;
 err:
        if (ctx_pool)
                dma_pool_destroy(ctx_pool);
index 3f0fdd1..856b3cc 100644 (file)
@@ -489,4 +489,4 @@ MODULE_DESCRIPTION("VIA PadLock AES algorithm support");
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Michal Ludvig");
 
-MODULE_ALIAS("aes-all");
+MODULE_ALIAS("aes");