summaryrefslogtreecommitdiff
path: root/core/kmod/0001-libkmod-file-gracefully-handle-errors-from-zlib.patch
diff options
context:
space:
mode:
authorroot <root@rshg054.dnsready.net>2012-05-14 00:02:14 +0000
committerroot <root@rshg054.dnsready.net>2012-05-14 00:02:14 +0000
commitd3af8dc0117dc1ce4fea3d05c7a2d7786bd78986 (patch)
tree31feb3c3623dd48f13ce1cdbdf10d870ea5b5678 /core/kmod/0001-libkmod-file-gracefully-handle-errors-from-zlib.patch
parente8aea505d7f36277edd02ef965bc3f8e1c81ee5d (diff)
Mon May 14 00:02:13 UTC 2012
Diffstat (limited to 'core/kmod/0001-libkmod-file-gracefully-handle-errors-from-zlib.patch')
-rw-r--r--core/kmod/0001-libkmod-file-gracefully-handle-errors-from-zlib.patch35
1 files changed, 35 insertions, 0 deletions
diff --git a/core/kmod/0001-libkmod-file-gracefully-handle-errors-from-zlib.patch b/core/kmod/0001-libkmod-file-gracefully-handle-errors-from-zlib.patch
new file mode 100644
index 000000000..30c92b280
--- /dev/null
+++ b/core/kmod/0001-libkmod-file-gracefully-handle-errors-from-zlib.patch
@@ -0,0 +1,35 @@
+From c7d5a60d3df735a3816bbc1ff1b416a803a4f7a6 Mon Sep 17 00:00:00 2001
+From: Dave Reisner <dreisner@archlinux.org>
+Date: Mon, 7 May 2012 19:41:41 -0400
+Subject: [PATCH 1/2] libkmod-file: gracefully handle errors from zlib
+
+zlib won't necessarily set the system errno, and this is particularly
+evident on corrupted data (which results in a double free). Use zlib's
+gzerror to detect the failure, returning a generic EINVAL when zlib
+doesn't provide us with an errno.
+---
+ libkmod/libkmod-file.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/libkmod/libkmod-file.c b/libkmod/libkmod-file.c
+index 46ad8d9..8beb7e3 100644
+--- a/libkmod/libkmod-file.c
++++ b/libkmod/libkmod-file.c
+@@ -199,7 +199,13 @@ static int load_zlib(struct kmod_file *file)
+ if (r == 0)
+ break;
+ else if (r < 0) {
+- err = -errno;
++ int gzerr;
++ const char *gz_errmsg = gzerror(file->gzf, &gzerr);
++
++ ERR(file->ctx, "gzip: %s\n", gz_errmsg);
++
++ /* gzip might not set errno here */
++ err = gzerr == Z_ERRNO ? -errno : -EINVAL;
+ goto error;
+ }
+ did += r;
+--
+1.7.10.1
+