diff options
author | Peter Robinson <pbrobinson@gmail.com> | 2018-04-12 13:21:57 +0100 |
---|---|---|
committer | Jeremy Cline <jeremy@jcline.org> | 2018-04-12 09:31:46 -0400 |
commit | fe4ef5f7593324482af5bc6a9a216253b4b751c8 (patch) | |
tree | ec5122b06a066cac9859be05b12e89d7ea78a320 | |
parent | d251871b109cf759d09bdf67f6fc3d2f0fa97276 (diff) | |
download | kernel-fe4ef5f7593324482af5bc6a9a216253b4b751c8.tar.gz kernel-fe4ef5f7593324482af5bc6a9a216253b4b751c8.tar.xz kernel-fe4ef5f7593324482af5bc6a9a216253b4b751c8.zip |
Further fix for ThunderX ZIP driver - not had a decent review upstream, yet, seems mostly sane
-rw-r--r-- | crypto-testmgr-Allow-different-compression-results.patch | 163 | ||||
-rw-r--r-- | kernel.spec | 6 |
2 files changed, 168 insertions, 1 deletions
diff --git a/crypto-testmgr-Allow-different-compression-results.patch b/crypto-testmgr-Allow-different-compression-results.patch new file mode 100644 index 000000000..c752770ef --- /dev/null +++ b/crypto-testmgr-Allow-different-compression-results.patch @@ -0,0 +1,163 @@ +From patchwork Wed Apr 11 18:28:32 2018 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: crypto: testmgr: Allow different compression results +From: Jan Glauber <jglauber@cavium.com> +X-Patchwork-Id: 10336001 +Message-Id: <20180411182832.27761-1-jglauber@cavium.com> +To: Herbert Xu <herbert@gondor.apana.org.au> +Cc: "David S . Miller" <davem@davemloft.net>, + linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org, + Mahipal Challa <mchalla@cavium.com>, + Balakrishna Bhamidipati <bbhamidipati@cavium.com>, + Jan Glauber <jglauber@cavium.com> +Date: Wed, 11 Apr 2018 20:28:32 +0200 + +From: Mahipal Challa <mchalla@cavium.com> + +The following error is triggered by the ThunderX ZIP driver +if the testmanager is enabled: + +[ 199.069437] ThunderX-ZIP 0000:03:00.0: Found ZIP device 0 177d:a01a on Node 0 +[ 199.073573] alg: comp: Compression test 1 failed for deflate-generic: output len = 37 + +The reason for this error is the verification of the compression +results. Verifying the compression result only works if all +algorithm parameters are identical, in this case to the software +implementation. + +Different compression engines like the ThunderX ZIP coprocessor +might yield different compression results by tuning the +algorithm parameters. In our case the compressed result is +shorter than the test vector. + +We should not forbid different compression results but only +check that compression -> decompression yields the same +result. This is done already in the acomp test. Do something +similar for test_comp(). + +Signed-off-by: Mahipal Challa <mchalla@cavium.com> +Signed-off-by: Balakrishna Bhamidipati <bbhamidipati@cavium.com> +[jglauber@cavium.com: removed unrelated printk changes, rewrote commit msg, + fixed whitespace and unneeded initialization] +Signed-off-by: Jan Glauber <jglauber@cavium.com> +--- + crypto/testmgr.c | 50 +++++++++++++++++++++++++++++++++++++------------- + 1 file changed, 37 insertions(+), 13 deletions(-) + +diff --git a/crypto/testmgr.c b/crypto/testmgr.c +index af4a01c..627e82e 100644 +--- a/crypto/testmgr.c ++++ b/crypto/testmgr.c +@@ -1342,19 +1342,30 @@ static int test_comp(struct crypto_comp *tfm, + int ctcount, int dtcount) + { + const char *algo = crypto_tfm_alg_driver_name(crypto_comp_tfm(tfm)); ++ char *output, *decomp_output; + unsigned int i; +- char result[COMP_BUF_SIZE]; + int ret; + ++ output = kmalloc(COMP_BUF_SIZE, GFP_KERNEL); ++ if (!output) ++ return -ENOMEM; ++ ++ decomp_output = kmalloc(COMP_BUF_SIZE, GFP_KERNEL); ++ if (!decomp_output) { ++ kfree(output); ++ return -ENOMEM; ++ } ++ + for (i = 0; i < ctcount; i++) { + int ilen; + unsigned int dlen = COMP_BUF_SIZE; + +- memset(result, 0, sizeof (result)); ++ memset(output, 0, sizeof(COMP_BUF_SIZE)); ++ memset(decomp_output, 0, sizeof(COMP_BUF_SIZE)); + + ilen = ctemplate[i].inlen; + ret = crypto_comp_compress(tfm, ctemplate[i].input, +- ilen, result, &dlen); ++ ilen, output, &dlen); + if (ret) { + printk(KERN_ERR "alg: comp: compression failed " + "on test %d for %s: ret=%d\n", i + 1, algo, +@@ -1362,7 +1373,17 @@ static int test_comp(struct crypto_comp *tfm, + goto out; + } + +- if (dlen != ctemplate[i].outlen) { ++ ilen = dlen; ++ dlen = COMP_BUF_SIZE; ++ ret = crypto_comp_decompress(tfm, output, ++ ilen, decomp_output, &dlen); ++ if (ret) { ++ pr_err("alg: comp: compression failed: decompress: on test %d for %s failed: ret=%d\n", ++ i + 1, algo, -ret); ++ goto out; ++ } ++ ++ if (dlen != ctemplate[i].inlen) { + printk(KERN_ERR "alg: comp: Compression test %d " + "failed for %s: output len = %d\n", i + 1, algo, + dlen); +@@ -1370,10 +1391,11 @@ static int test_comp(struct crypto_comp *tfm, + goto out; + } + +- if (memcmp(result, ctemplate[i].output, dlen)) { +- printk(KERN_ERR "alg: comp: Compression test %d " +- "failed for %s\n", i + 1, algo); +- hexdump(result, dlen); ++ if (memcmp(decomp_output, ctemplate[i].input, ++ ctemplate[i].inlen)) { ++ pr_err("alg: comp: compression failed: output differs: on test %d for %s\n", ++ i + 1, algo); ++ hexdump(decomp_output, dlen); + ret = -EINVAL; + goto out; + } +@@ -1383,11 +1405,11 @@ static int test_comp(struct crypto_comp *tfm, + int ilen; + unsigned int dlen = COMP_BUF_SIZE; + +- memset(result, 0, sizeof (result)); ++ memset(decomp_output, 0, sizeof(COMP_BUF_SIZE)); + + ilen = dtemplate[i].inlen; + ret = crypto_comp_decompress(tfm, dtemplate[i].input, +- ilen, result, &dlen); ++ ilen, decomp_output, &dlen); + if (ret) { + printk(KERN_ERR "alg: comp: decompression failed " + "on test %d for %s: ret=%d\n", i + 1, algo, +@@ -1403,10 +1425,10 @@ static int test_comp(struct crypto_comp *tfm, + goto out; + } + +- if (memcmp(result, dtemplate[i].output, dlen)) { ++ if (memcmp(decomp_output, dtemplate[i].output, dlen)) { + printk(KERN_ERR "alg: comp: Decompression test %d " + "failed for %s\n", i + 1, algo); +- hexdump(result, dlen); ++ hexdump(decomp_output, dlen); + ret = -EINVAL; + goto out; + } +@@ -1415,11 +1437,13 @@ static int test_comp(struct crypto_comp *tfm, + ret = 0; + + out: ++ kfree(decomp_output); ++ kfree(output); + return ret; + } + + static int test_acomp(struct crypto_acomp *tfm, +- const struct comp_testvec *ctemplate, ++ const struct comp_testvec *ctemplate, + const struct comp_testvec *dtemplate, + int ctcount, int dtcount) + { diff --git a/kernel.spec b/kernel.spec index f4f13f9c5..ae06e307c 100644 --- a/kernel.spec +++ b/kernel.spec @@ -608,7 +608,10 @@ Patch312: bcm283x-clk-audio-fixes.patch # https://marc.info/?l=linux-kernel&m=152328880417846&w=2 Patch313: arm64-thunderx-crypto-zip-fixes.patch -Patch314: arm-tegra-fix-nouveau-crash.patch +# https://www.spinics.net/lists/linux-crypto/msg32725.html +Patch314: crypto-testmgr-Allow-different-compression-results.patch + +Patch315: arm-tegra-fix-nouveau-crash.patch # Enabling Patches for the RPi3+ Patch320: bcm2837-rpi-initial-support-for-the-3.patch @@ -1891,6 +1894,7 @@ fi * Thu Apr 12 2018 Peter Robinson <pbrobinson@fedoraproject.org> - Patch to fix nouveau on Tegra platforms - Enable IOMMU on Exynos now upstream does +- Further fix for ThunderX ZIP driver * Mon Apr 09 2018 Jeremy Cline <jeremy@jcline.org> - Include the KCS IPMI BMC driver that's in F27 |