mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2025-04-21 12:27:27 +03:00
2.6.30: add lzma support to squashfs through pcomp
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@15934 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
280
target/linux/generic-2.6/patches-2.6.30/050-pcomp_update.patch
Normal file
280
target/linux/generic-2.6/patches-2.6.30/050-pcomp_update.patch
Normal file
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user