diff options
Diffstat (limited to 'target/linux/generic-2.6/patches-2.6.30/050-pcomp_update.patch')
-rw-r--r-- | target/linux/generic-2.6/patches-2.6.30/050-pcomp_update.patch | 280 |
1 files changed, 280 insertions, 0 deletions
diff --git a/target/linux/generic-2.6/patches-2.6.30/050-pcomp_update.patch b/target/linux/generic-2.6/patches-2.6.30/050-pcomp_update.patch new file mode 100644 index 0000000..abad724 --- /dev/null +++ b/target/linux/generic-2.6/patches-2.6.30/050-pcomp_update.patch @@ -0,0 +1,280 @@ +--- a/crypto/testmgr.c ++++ b/crypto/testmgr.c +@@ -914,24 +914,25 @@ static int test_pcomp(struct crypto_pcom + const char *algo = crypto_tfm_alg_driver_name(crypto_pcomp_tfm(tfm)); + unsigned int i; + char result[COMP_BUF_SIZE]; +- int error; ++ int res; + + for (i = 0; i < ctcount; i++) { + struct comp_request req; ++ unsigned int produced = 0; + +- error = crypto_compress_setup(tfm, ctemplate[i].params, +- ctemplate[i].paramsize); +- if (error) { ++ res = crypto_compress_setup(tfm, ctemplate[i].params, ++ ctemplate[i].paramsize); ++ if (res) { + pr_err("alg: pcomp: compression setup failed on test " +- "%d for %s: error=%d\n", i + 1, algo, error); +- return error; ++ "%d for %s: error=%d\n", i + 1, algo, res); ++ return res; + } + +- error = crypto_compress_init(tfm); +- if (error) { ++ res = crypto_compress_init(tfm); ++ if (res) { + pr_err("alg: pcomp: compression init failed on test " +- "%d for %s: error=%d\n", i + 1, algo, error); +- return error; ++ "%d for %s: error=%d\n", i + 1, algo, res); ++ return res; + } + + memset(result, 0, sizeof(result)); +@@ -941,32 +942,37 @@ static int test_pcomp(struct crypto_pcom + req.next_out = result; + req.avail_out = ctemplate[i].outlen / 2; + +- error = crypto_compress_update(tfm, &req); +- if (error && (error != -EAGAIN || req.avail_in)) { ++ res = crypto_compress_update(tfm, &req); ++ if (res < 0 && (res != -EAGAIN || req.avail_in)) { + pr_err("alg: pcomp: compression update failed on test " +- "%d for %s: error=%d\n", i + 1, algo, error); +- return error; ++ "%d for %s: error=%d\n", i + 1, algo, res); ++ return res; + } ++ if (res > 0) ++ produced += res; + + /* Add remaining input data */ + req.avail_in += (ctemplate[i].inlen + 1) / 2; + +- error = crypto_compress_update(tfm, &req); +- if (error && (error != -EAGAIN || req.avail_in)) { ++ res = crypto_compress_update(tfm, &req); ++ if (res < 0 && (res != -EAGAIN || req.avail_in)) { + pr_err("alg: pcomp: compression update failed on test " +- "%d for %s: error=%d\n", i + 1, algo, error); +- return error; ++ "%d for %s: error=%d\n", i + 1, algo, res); ++ return res; + } ++ if (res > 0) ++ produced += res; + + /* Provide remaining output space */ + req.avail_out += COMP_BUF_SIZE - ctemplate[i].outlen / 2; + +- error = crypto_compress_final(tfm, &req); +- if (error) { ++ res = crypto_compress_final(tfm, &req); ++ if (res < 0) { + pr_err("alg: pcomp: compression final failed on test " +- "%d for %s: error=%d\n", i + 1, algo, error); +- return error; ++ "%d for %s: error=%d\n", i + 1, algo, res); ++ return res; + } ++ produced += res; + + if (COMP_BUF_SIZE - req.avail_out != ctemplate[i].outlen) { + pr_err("alg: comp: Compression test %d failed for %s: " +@@ -976,6 +982,13 @@ static int test_pcomp(struct crypto_pcom + return -EINVAL; + } + ++ if (produced != ctemplate[i].outlen) { ++ pr_err("alg: comp: Compression test %d failed for %s: " ++ "returned len = %u (expected %d)\n", i + 1, ++ algo, produced, ctemplate[i].outlen); ++ return -EINVAL; ++ } ++ + if (memcmp(result, ctemplate[i].output, ctemplate[i].outlen)) { + pr_err("alg: pcomp: Compression test %d failed for " + "%s\n", i + 1, algo); +@@ -986,21 +999,21 @@ static int test_pcomp(struct crypto_pcom + + for (i = 0; i < dtcount; i++) { + struct comp_request req; ++ unsigned int produced = 0; + +- error = crypto_decompress_setup(tfm, dtemplate[i].params, +- dtemplate[i].paramsize); +- if (error) { ++ res = crypto_decompress_setup(tfm, dtemplate[i].params, ++ dtemplate[i].paramsize); ++ if (res) { + pr_err("alg: pcomp: decompression setup failed on " +- "test %d for %s: error=%d\n", i + 1, algo, +- error); +- return error; ++ "test %d for %s: error=%d\n", i + 1, algo, res); ++ return res; + } + +- error = crypto_decompress_init(tfm); +- if (error) { ++ res = crypto_decompress_init(tfm); ++ if (res) { + pr_err("alg: pcomp: decompression init failed on test " +- "%d for %s: error=%d\n", i + 1, algo, error); +- return error; ++ "%d for %s: error=%d\n", i + 1, algo, res); ++ return res; + } + + memset(result, 0, sizeof(result)); +@@ -1010,35 +1023,38 @@ static int test_pcomp(struct crypto_pcom + req.next_out = result; + req.avail_out = dtemplate[i].outlen / 2; + +- error = crypto_decompress_update(tfm, &req); +- if (error && (error != -EAGAIN || req.avail_in)) { ++ res = crypto_decompress_update(tfm, &req); ++ if (res < 0 && (res != -EAGAIN || req.avail_in)) { + pr_err("alg: pcomp: decompression update failed on " +- "test %d for %s: error=%d\n", i + 1, algo, +- error); +- return error; ++ "test %d for %s: error=%d\n", i + 1, algo, res); ++ return res; + } ++ if (res > 0) ++ produced += res; + + /* Add remaining input data */ + req.avail_in += (dtemplate[i].inlen + 1) / 2; + +- error = crypto_decompress_update(tfm, &req); +- if (error && (error != -EAGAIN || req.avail_in)) { ++ res = crypto_decompress_update(tfm, &req); ++ if (res < 0 && (res != -EAGAIN || req.avail_in)) { + pr_err("alg: pcomp: decompression update failed on " +- "test %d for %s: error=%d\n", i + 1, algo, +- error); +- return error; ++ "test %d for %s: error=%d\n", i + 1, algo, res); ++ return res; + } ++ if (res > 0) ++ produced += res; + + /* Provide remaining output space */ + req.avail_out += COMP_BUF_SIZE - dtemplate[i].outlen / 2; + +- error = crypto_decompress_final(tfm, &req); +- if (error && (error != -EAGAIN || req.avail_in)) { ++ res = crypto_decompress_final(tfm, &req); ++ if (res < 0 && (res != -EAGAIN || req.avail_in)) { + pr_err("alg: pcomp: decompression final failed on " +- "test %d for %s: error=%d\n", i + 1, algo, +- error); +- return error; ++ "test %d for %s: error=%d\n", i + 1, algo, res); ++ return res; + } ++ if (res > 0) ++ produced += res; + + if (COMP_BUF_SIZE - req.avail_out != dtemplate[i].outlen) { + pr_err("alg: comp: Decompression test %d failed for " +@@ -1048,6 +1064,13 @@ static int test_pcomp(struct crypto_pcom + return -EINVAL; + } + ++ if (produced != dtemplate[i].outlen) { ++ pr_err("alg: comp: Decompression test %d failed for " ++ "%s: returned len = %u (expected %d)\n", i + 1, ++ algo, produced, dtemplate[i].outlen); ++ return -EINVAL; ++ } ++ + if (memcmp(result, dtemplate[i].output, dtemplate[i].outlen)) { + pr_err("alg: pcomp: Decompression test %d failed for " + "%s\n", i + 1, algo); +--- a/crypto/zlib.c ++++ b/crypto/zlib.c +@@ -165,15 +165,15 @@ static int zlib_compress_update(struct c + return -EINVAL; + } + ++ ret = req->avail_out - stream->avail_out; + pr_debug("avail_in %u, avail_out %u (consumed %u, produced %u)\n", + stream->avail_in, stream->avail_out, +- req->avail_in - stream->avail_in, +- req->avail_out - stream->avail_out); ++ req->avail_in - stream->avail_in, ret); + req->next_in = stream->next_in; + req->avail_in = stream->avail_in; + req->next_out = stream->next_out; + req->avail_out = stream->avail_out; +- return 0; ++ return ret; + } + + static int zlib_compress_final(struct crypto_pcomp *tfm, +@@ -195,15 +195,15 @@ static int zlib_compress_final(struct cr + return -EINVAL; + } + ++ ret = req->avail_out - stream->avail_out; + pr_debug("avail_in %u, avail_out %u (consumed %u, produced %u)\n", + stream->avail_in, stream->avail_out, +- req->avail_in - stream->avail_in, +- req->avail_out - stream->avail_out); ++ req->avail_in - stream->avail_in, ret); + req->next_in = stream->next_in; + req->avail_in = stream->avail_in; + req->next_out = stream->next_out; + req->avail_out = stream->avail_out; +- return 0; ++ return ret; + } + + +@@ -280,15 +280,15 @@ static int zlib_decompress_update(struct + return -EINVAL; + } + ++ ret = req->avail_out - stream->avail_out; + pr_debug("avail_in %u, avail_out %u (consumed %u, produced %u)\n", + stream->avail_in, stream->avail_out, +- req->avail_in - stream->avail_in, +- req->avail_out - stream->avail_out); ++ req->avail_in - stream->avail_in, ret); + req->next_in = stream->next_in; + req->avail_in = stream->avail_in; + req->next_out = stream->next_out; + req->avail_out = stream->avail_out; +- return 0; ++ return ret; + } + + static int zlib_decompress_final(struct crypto_pcomp *tfm, +@@ -328,15 +328,15 @@ static int zlib_decompress_final(struct + return -EINVAL; + } + ++ ret = req->avail_out - stream->avail_out; + pr_debug("avail_in %u, avail_out %u (consumed %u, produced %u)\n", + stream->avail_in, stream->avail_out, +- req->avail_in - stream->avail_in, +- req->avail_out - stream->avail_out); ++ req->avail_in - stream->avail_in, ret); + req->next_in = stream->next_in; + req->avail_in = stream->avail_in; + req->next_out = stream->next_out; + req->avail_out = stream->avail_out; +- return 0; ++ return ret; + } + + |