x86/smpboot: Init apic mapping before usage
[cascardo/linux.git] / crypto / testmgr.c
index 5c9d5a5..62dffa0 100644 (file)
@@ -209,16 +209,19 @@ static int ahash_partial_update(struct ahash_request **preq,
        char *state;
        struct ahash_request *req;
        int statesize, ret = -EINVAL;
+       const char guard[] = { 0x00, 0xba, 0xad, 0x00 };
 
        req = *preq;
        statesize = crypto_ahash_statesize(
                        crypto_ahash_reqtfm(req));
-       state = kmalloc(statesize, GFP_KERNEL);
+       state = kmalloc(statesize + sizeof(guard), GFP_KERNEL);
        if (!state) {
                pr_err("alt: hash: Failed to alloc state for %s\n", algo);
                goto out_nostate;
        }
+       memcpy(state + statesize, guard, sizeof(guard));
        ret = crypto_ahash_export(req, state);
+       WARN_ON(memcmp(state + statesize, guard, sizeof(guard)));
        if (ret) {
                pr_err("alt: hash: Failed to export() for %s\n", algo);
                goto out;
@@ -665,7 +668,7 @@ static int __test_aead(struct crypto_aead *tfm, int enc,
                memcpy(key, template[i].key, template[i].klen);
 
                ret = crypto_aead_setkey(tfm, key, template[i].klen);
-               if (!ret == template[i].fail) {
+               if (template[i].fail == !ret) {
                        pr_err("alg: aead%s: setkey failed on test %d for %s: flags=%x\n",
                               d, j, algo, crypto_aead_get_flags(tfm));
                        goto out;
@@ -770,7 +773,7 @@ static int __test_aead(struct crypto_aead *tfm, int enc,
                memcpy(key, template[i].key, template[i].klen);
 
                ret = crypto_aead_setkey(tfm, key, template[i].klen);
-               if (!ret == template[i].fail) {
+               if (template[i].fail == !ret) {
                        pr_err("alg: aead%s: setkey failed on chunk test %d for %s: flags=%x\n",
                               d, j, algo, crypto_aead_get_flags(tfm));
                        goto out;
@@ -1008,6 +1011,9 @@ static int test_cipher(struct crypto_cipher *tfm, int enc,
                if (template[i].np)
                        continue;
 
+               if (fips_enabled && template[i].fips_skip)
+                       continue;
+
                j++;
 
                ret = -EINVAL;
@@ -1023,7 +1029,7 @@ static int test_cipher(struct crypto_cipher *tfm, int enc,
 
                ret = crypto_cipher_setkey(tfm, template[i].key,
                                           template[i].klen);
-               if (!ret == template[i].fail) {
+               if (template[i].fail == !ret) {
                        printk(KERN_ERR "alg: cipher: setkey failed "
                               "on test %d for %s: flags=%x\n", j,
                               algo, crypto_cipher_get_flags(tfm));
@@ -1112,6 +1118,9 @@ static int __test_skcipher(struct crypto_skcipher *tfm, int enc,
                if (template[i].np && !template[i].also_non_np)
                        continue;
 
+               if (fips_enabled && template[i].fips_skip)
+                       continue;
+
                if (template[i].iv)
                        memcpy(iv, template[i].iv, ivsize);
                else
@@ -1133,7 +1142,7 @@ static int __test_skcipher(struct crypto_skcipher *tfm, int enc,
 
                ret = crypto_skcipher_setkey(tfm, template[i].key,
                                             template[i].klen);
-               if (!ret == template[i].fail) {
+               if (template[i].fail == !ret) {
                        pr_err("alg: skcipher%s: setkey failed on test %d for %s: flags=%x\n",
                               d, j, algo, crypto_skcipher_get_flags(tfm));
                        goto out;
@@ -1198,6 +1207,9 @@ static int __test_skcipher(struct crypto_skcipher *tfm, int enc,
                if (!template[i].np)
                        continue;
 
+               if (fips_enabled && template[i].fips_skip)
+                       continue;
+
                if (template[i].iv)
                        memcpy(iv, template[i].iv, ivsize);
                else
@@ -1211,7 +1223,7 @@ static int __test_skcipher(struct crypto_skcipher *tfm, int enc,
 
                ret = crypto_skcipher_setkey(tfm, template[i].key,
                                             template[i].klen);
-               if (!ret == template[i].fail) {
+               if (template[i].fail == !ret) {
                        pr_err("alg: skcipher%s: setkey failed on chunk test %d for %s: flags=%x\n",
                               d, j, algo, crypto_skcipher_get_flags(tfm));
                        goto out;