diff options
Diffstat (limited to 'package/boot/kexec-tools/patches/0001-Fix-zlib-lzma-decompression.patch')
-rw-r--r-- | package/boot/kexec-tools/patches/0001-Fix-zlib-lzma-decompression.patch | 171 |
1 files changed, 0 insertions, 171 deletions
diff --git a/package/boot/kexec-tools/patches/0001-Fix-zlib-lzma-decompression.patch b/package/boot/kexec-tools/patches/0001-Fix-zlib-lzma-decompression.patch deleted file mode 100644 index 06c11ec..0000000 --- a/package/boot/kexec-tools/patches/0001-Fix-zlib-lzma-decompression.patch +++ /dev/null @@ -1,171 +0,0 @@ -From d606837b56d46eb7f815b5d85f07fcc3f1555d00 Mon Sep 17 00:00:00 2001 -From: Yousong Zhou <yszhou4tech@gmail.com> -Date: Sun, 1 Feb 2015 00:10:07 +0800 -Subject: [PATCH 1/5] Fix zlib/lzma decompression. - -Let {zlib,lzma}_decompress_file() return NULL if anything wrong happened -to allow the other method to have a chance to run. - -Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com> -Signed-off-by: Simon Horman <horms@verge.net.au> ---- - kexec/lzma.c | 33 ++++++++++++++++++++++----------- - kexec/zlib.c | 57 +++++++++++++++++++++++++++++++++++---------------------- - 2 files changed, 57 insertions(+), 33 deletions(-) - -diff --git a/kexec/lzma.c b/kexec/lzma.c -index 939aeb3..5bfccb7 100644 ---- a/kexec/lzma.c -+++ b/kexec/lzma.c -@@ -162,13 +162,16 @@ char *lzma_decompress_file(const char *filename, off_t *r_size) - off_t size, allocated; - ssize_t result; - -- if (!filename) { -- *r_size = 0; -- return 0; -- } -+ dbgprintf("Try LZMA decompression.\n"); -+ -+ *r_size = 0; -+ if (!filename) -+ return NULL; -+ - fp = lzopen(filename, "rb"); - if (fp == 0) { -- die("Cannot open `%s'\n", filename); -+ dbgprintf("Cannot open `%s'\n", filename); -+ return NULL; - } - size = 0; - allocated = 65536; -@@ -183,17 +186,25 @@ char *lzma_decompress_file(const char *filename, off_t *r_size) - if ((errno == EINTR) || (errno == EAGAIN)) - continue; - -- die ("read on %s of %ld bytes failed\n", -- filename, (allocated - size) + 0UL); -+ dbgprintf("%s: read on %s of %ld bytes failed\n", -+ __func__, filename, (allocated - size) + 0UL); -+ break; - } - size += result; -- } while(result > 0); -- result = lzclose(fp); -- if (result != LZMA_OK) { -- die ("Close of %s failed\n", filename); -+ } while (result > 0); -+ -+ if (lzclose(fp) != LZMA_OK) { -+ dbgprintf("%s: Close of %s failed\n", __func__, filename); -+ goto fail; - } -+ if (result < 0) -+ goto fail; -+ - *r_size = size; - return buf; -+fail: -+ free(buf); -+ return NULL; - } - #else - char *lzma_decompress_file(const char *UNUSED(filename), off_t *UNUSED(r_size)) -diff --git a/kexec/zlib.c b/kexec/zlib.c -index d44df12..7170ac3 100644 ---- a/kexec/zlib.c -+++ b/kexec/zlib.c -@@ -15,29 +15,39 @@ - #include <ctype.h> - #include <zlib.h> - -+static void _gzerror(gzFile fp, int *errnum, const char **errmsg) -+{ -+ *errmsg = gzerror(fp, errnum); -+ if (*errnum == Z_ERRNO) { -+ *errmsg = strerror(*errnum); -+ } -+} -+ - char *zlib_decompress_file(const char *filename, off_t *r_size) - { - gzFile fp; - int errnum; - const char *msg; - char *buf; -- off_t size, allocated; -+ off_t size = 0, allocated; - ssize_t result; - -+ dbgprintf("Try gzip decompression.\n"); -+ -+ *r_size = 0; - if (!filename) { -- *r_size = 0; -- return 0; -+ return NULL; - } - fp = gzopen(filename, "rb"); - if (fp == 0) { -- msg = gzerror(fp, &errnum); -- if (errnum == Z_ERRNO) { -- msg = strerror(errno); -- } -- fprintf(stderr, "Cannot open `%s': %s\n", filename, msg); -+ _gzerror(fp, &errnum, &msg); -+ dbgprintf("Cannot open `%s': %s\n", filename, msg); -+ return NULL; -+ } -+ if (gzdirect(fp)) { -+ /* It's not in gzip format */ - return NULL; - } -- size = 0; - allocated = 65536; - buf = xmalloc(allocated); - do { -@@ -49,25 +59,28 @@ char *zlib_decompress_file(const char *filename, off_t *r_size) - if (result < 0) { - if ((errno == EINTR) || (errno == EAGAIN)) - continue; -- -- msg = gzerror(fp, &errnum); -- if (errnum == Z_ERRNO) { -- msg = strerror(errno); -- } -- die ("read on %s of %ld bytes failed: %s\n", -- filename, (allocated - size) + 0UL, msg); -+ _gzerror(fp, &errnum, &msg); -+ dbgprintf("Read on %s of %ld bytes failed: %s\n", -+ filename, (allocated - size) + 0UL, msg); -+ size = 0; -+ goto fail; - } - size += result; - } while(result > 0); -+ -+fail: - result = gzclose(fp); - if (result != Z_OK) { -- msg = gzerror(fp, &errnum); -- if (errnum == Z_ERRNO) { -- msg = strerror(errno); -- } -- die ("Close of %s failed: %s\n", filename, msg); -+ _gzerror(fp, &errnum, &msg); -+ dbgprintf(" Close of %s failed: %s\n", filename, msg); -+ } -+ -+ if (size > 0) { -+ *r_size = size; -+ } else { -+ free(buf); -+ buf = NULL; - } -- *r_size = size; - return buf; - } - #else --- -1.7.10.4 - |