summaryrefslogtreecommitdiff
path: root/testing/kmod
diff options
context:
space:
mode:
authorroot <root@rshg054.dnsready.net>2012-05-12 00:02:41 +0000
committerroot <root@rshg054.dnsready.net>2012-05-12 00:02:41 +0000
commite1da03cf5ba92abee0e3afd9dc4cef438ebf96c7 (patch)
tree233b060ecee707d77b6c0d3d91de90eb4beed13e /testing/kmod
parent2ced64d6aa5881fa575de1861c464c432deee26f (diff)
Sat May 12 00:02:41 UTC 2012
Diffstat (limited to 'testing/kmod')
-rw-r--r--testing/kmod/0001-libkmod-file-gracefully-handle-errors-from-zlib.patch35
-rw-r--r--testing/kmod/0001-split-usr-read-configs-from-lib-depmod.d-modprobe.d.patch50
-rw-r--r--testing/kmod/0002-config-hardcode-the-path-to-modules-to-be-lib-module.patch93
-rw-r--r--testing/kmod/0002-depmod-report-failures-in-loading-symbols.patch34
-rw-r--r--testing/kmod/PKGBUILD69
-rw-r--r--testing/kmod/depmod-search.conf5
6 files changed, 286 insertions, 0 deletions
diff --git a/testing/kmod/0001-libkmod-file-gracefully-handle-errors-from-zlib.patch b/testing/kmod/0001-libkmod-file-gracefully-handle-errors-from-zlib.patch
new file mode 100644
index 000000000..30c92b280
--- /dev/null
+++ b/testing/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
+
diff --git a/testing/kmod/0001-split-usr-read-configs-from-lib-depmod.d-modprobe.d.patch b/testing/kmod/0001-split-usr-read-configs-from-lib-depmod.d-modprobe.d.patch
new file mode 100644
index 000000000..bf2c3501f
--- /dev/null
+++ b/testing/kmod/0001-split-usr-read-configs-from-lib-depmod.d-modprobe.d.patch
@@ -0,0 +1,50 @@
+From 666ba68a0635048aea0db70cd9ec61aea9b61ed2 Mon Sep 17 00:00:00 2001
+From: Tom Gundersen <teg@jklm.no>
+Date: Sat, 3 Mar 2012 12:37:06 +0100
+Subject: [PATCH 1/2] split usr: read configs from /lib/{depmod.d,modprobe.d}
+
+This allows rootprefix to be set to /usr, even if not all other packages
+have been fixed to read from this dir.
+---
+ libkmod/libkmod.c | 5 +++--
+ tools/kmod-depmod.c | 1 +
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/libkmod/libkmod.c b/libkmod/libkmod.c
+index 36ca629..12c1112 100644
+--- a/libkmod/libkmod.c
++++ b/libkmod/libkmod.c
+@@ -62,6 +62,7 @@ static const char *default_config_paths[] = {
+ SYSCONFDIR "/modprobe.d",
+ "/run/modprobe.d",
+ ROOTPREFIX "/lib/modprobe.d",
++ "/lib/modprobe.d",
+ NULL
+ };
+
+@@ -223,8 +224,8 @@ static char *get_kernel_release(const char *dirname)
+ * @config_paths: ordered array of paths (directories or files) where
+ * to load from user-defined configuration parameters such as
+ * alias, blacklists, commands (install, remove). If
+- * NULL defaults to /run/modprobe.d, /etc/modprobe.d and
+- * $rootprefix/lib/modprobe.d. Give an empty vector if
++ * NULL defaults to /run/modprobe.d, /etc/modprobe.d,
++ * $rootprefix/lib/modprobe.d and /lib/modprobe.d. Give an empty vector if
+ * configuration should not be read. This array must be null
+ * terminated.
+ *
+diff --git a/tools/kmod-depmod.c b/tools/kmod-depmod.c
+index 1871e18..7bb1c5d 100644
+--- a/tools/kmod-depmod.c
++++ b/tools/kmod-depmod.c
+@@ -58,6 +58,7 @@ static const char *default_cfg_paths[] = {
+ "/run/depmod.d",
+ SYSCONFDIR "/depmod.d",
+ ROOTPREFIX "/lib/depmod.d",
++ "/lib/depmod.d",
+ NULL
+ };
+
+--
+1.7.9.5
+
diff --git a/testing/kmod/0002-config-hardcode-the-path-to-modules-to-be-lib-module.patch b/testing/kmod/0002-config-hardcode-the-path-to-modules-to-be-lib-module.patch
new file mode 100644
index 000000000..f39f36ace
--- /dev/null
+++ b/testing/kmod/0002-config-hardcode-the-path-to-modules-to-be-lib-module.patch
@@ -0,0 +1,93 @@
+From 53e7e0e42428770578ca0d54d0a9540f498f917f Mon Sep 17 00:00:00 2001
+From: Tom Gundersen <teg@jklm.no>
+Date: Sat, 31 Mar 2012 12:17:39 +0200
+Subject: [PATCH 2/2] config: hardcode the path to modules to be /lib/modules
+
+This means that we can move the configuration paths from /lib
+to /usr/lib without having to touch the kernel and related
+packages.
+
+That can be dealt with separately at a later location, in which case
+all we have to do is revert this patch.
+
+Signed-off-by: Tom Gundersen <teg@jklm.no>
+---
+ libkmod/libkmod.c | 2 +-
+ tools/kmod-depmod.c | 2 +-
+ tools/kmod-modinfo.c | 4 ++--
+ tools/kmod-modprobe.c | 4 ++--
+ 4 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/libkmod/libkmod.c b/libkmod/libkmod.c
+index 12c1112..11edfa0 100644
+--- a/libkmod/libkmod.c
++++ b/libkmod/libkmod.c
+@@ -196,7 +196,7 @@ static int log_priority(const char *priority)
+ return 0;
+ }
+
+-static const char *dirname_default_prefix = ROOTPREFIX "/lib/modules";
++static const char *dirname_default_prefix = "/lib/modules";
+
+ static char *get_kernel_release(const char *dirname)
+ {
+diff --git a/tools/kmod-depmod.c b/tools/kmod-depmod.c
+index 7bb1c5d..454d538 100644
+--- a/tools/kmod-depmod.c
++++ b/tools/kmod-depmod.c
+@@ -2634,7 +2634,7 @@ static int do_depmod(int argc, char *argv[])
+ }
+
+ cfg.dirnamelen = snprintf(cfg.dirname, PATH_MAX,
+- "%s" ROOTPREFIX "/lib/modules/%s",
++ "%s/lib/modules/%s",
+ root == NULL ? "" : root, cfg.kversion);
+
+ if (optind == argc)
+diff --git a/tools/kmod-modinfo.c b/tools/kmod-modinfo.c
+index aa5223f..b13cd4b 100644
+--- a/tools/kmod-modinfo.c
++++ b/tools/kmod-modinfo.c
+@@ -339,7 +339,7 @@ static void help(const char *progname)
+ "\t-0, --null Use \\0 instead of \\n\n"
+ "\t-F, --field=FIELD Print only provided FIELD\n"
+ "\t-k, --set-version=VERSION Use VERSION instead of `uname -r`\n"
+- "\t-b, --basedir=DIR Use DIR as filesystem root for " ROOTPREFIX "/lib/modules\n"
++ "\t-b, --basedir=DIR Use DIR as filesystem root for /lib/modules\n"
+ "\t-V, --version Show version\n"
+ "\t-h, --help Show this help\n",
+ progname);
+@@ -439,7 +439,7 @@ static int do_modinfo(int argc, char *argv[])
+ }
+ kversion = u.release;
+ }
+- snprintf(dirname_buf, sizeof(dirname_buf), "%s" ROOTPREFIX "/lib/modules/%s",
++ snprintf(dirname_buf, sizeof(dirname_buf), "%s/lib/modules/%s",
+ root, kversion);
+ dirname = dirname_buf;
+ }
+diff --git a/tools/kmod-modprobe.c b/tools/kmod-modprobe.c
+index 4760682..ccb41d8 100644
+--- a/tools/kmod-modprobe.c
++++ b/tools/kmod-modprobe.c
+@@ -128,7 +128,7 @@ static void help(const char *progname)
+ "\t-n, --show Same as --dry-run\n"
+
+ "\t-C, --config=FILE Use FILE instead of default search paths\n"
+- "\t-d, --dirname=DIR Use DIR as filesystem root for " ROOTPREFIX "/lib/modules\n"
++ "\t-d, --dirname=DIR Use DIR as filesystem root for /lib/modules\n"
+ "\t-S, --set-version=VERSION Use VERSION instead of `uname -r`\n"
+
+ "\t-s, --syslog print to syslog, not stderr\n"
+@@ -973,7 +973,7 @@ static int do_modprobe(int argc, char **orig_argv)
+ kversion = u.release;
+ }
+ snprintf(dirname_buf, sizeof(dirname_buf),
+- "%s" ROOTPREFIX "/lib/modules/%s", root,
++ "%s/lib/modules/%s", root,
+ kversion);
+ dirname = dirname_buf;
+ }
+--
+1.7.9.5
+
diff --git a/testing/kmod/0002-depmod-report-failures-in-loading-symbols.patch b/testing/kmod/0002-depmod-report-failures-in-loading-symbols.patch
new file mode 100644
index 000000000..90c58d5da
--- /dev/null
+++ b/testing/kmod/0002-depmod-report-failures-in-loading-symbols.patch
@@ -0,0 +1,34 @@
+From 819f79a24d58e3c8429f1631df2f8f85a2f95d4a Mon Sep 17 00:00:00 2001
+From: Dave Reisner <dreisner@archlinux.org>
+Date: Mon, 7 May 2012 19:41:42 -0400
+Subject: [PATCH 2/2] depmod: report failures in loading symbols
+
+Previously, depmod would relegate failures of kmod_module_get_symbols()
+to debug output, assuming the "error" was simply a lack of symbols.
+Leave the ENOENT return to debug output, but report anything else as a
+real error.
+---
+ tools/kmod-depmod.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/tools/kmod-depmod.c b/tools/kmod-depmod.c
+index e89dff6..bceb407 100644
+--- a/tools/kmod-depmod.c
++++ b/tools/kmod-depmod.c
+@@ -1542,8 +1542,11 @@ static int depmod_load_symbols(struct depmod *depmod)
+ struct kmod_list *l, *list = NULL;
+ int err = kmod_module_get_symbols(mod->kmod, &list);
+ if (err < 0) {
+- DBG("ignoring %s: no symbols: %s\n",
+- mod->path, strerror(-err));
++ if (err == -ENOENT)
++ DBG("ignoring %s: no symbols\n", mod->path);
++ else
++ ERR("failed to load symbols from %s: %s\n",
++ mod->path, strerror(-err));
+ continue;
+ }
+ kmod_list_foreach(l, list) {
+--
+1.7.10.1
+
diff --git a/testing/kmod/PKGBUILD b/testing/kmod/PKGBUILD
new file mode 100644
index 000000000..c51fc4d07
--- /dev/null
+++ b/testing/kmod/PKGBUILD
@@ -0,0 +1,69 @@
+# $Id: PKGBUILD 158817 2012-05-11 01:49:20Z dreisner $
+# Maintainer: Dave Reisner <dreisner@archlinux.org>
+
+pkgname=kmod
+pkgver=8
+pkgrel=2
+pkgdesc="Linux kernel module handling"
+arch=('i686' 'x86_64')
+url='http://git.kernel.org/?p=utils/kernel/kmod/kmod.git;a=summary'
+license=('GPL2')
+depends=('glibc' 'zlib')
+options=('!libtool')
+provides=('module-init-tools=3.16')
+conflicts=('module-init-tools')
+replaces=('module-init-tools')
+source=("ftp://ftp.kernel.org/pub/linux/utils/kernel/$pkgname/$pkgname-$pkgver.tar.xz"
+ "depmod-search.conf"
+ "0001-split-usr-read-configs-from-lib-depmod.d-modprobe.d.patch"
+ "0002-config-hardcode-the-path-to-modules-to-be-lib-module.patch"
+ "0001-libkmod-file-gracefully-handle-errors-from-zlib.patch"
+ "0002-depmod-report-failures-in-loading-symbols.patch")
+md5sums=('d4e3d038b5370b1e8ff237c55666aa64'
+ 'dd62cbf62bd8f212f51ef8c43bec9a77'
+ 'ba73b9e98db1abbf41274f922fcfbd55'
+ 'c9af56636c5667cf4ce3a31ea56e03d9'
+ '1a877b9863b94f91c8d3aec97c021c6b'
+ '1a9f132779f90556852e70279577ed22')
+
+build() {
+ cd "$pkgname-$pkgver"
+
+ patch -Np1 <"$srcdir"/0001-split-usr-read-configs-from-lib-depmod.d-modprobe.d.patch
+ patch -Np1 <"$srcdir"/0002-config-hardcode-the-path-to-modules-to-be-lib-module.patch
+
+ # fix crash on corrupted zlib compression
+ patch -Np1 <"$srcdir"/0001-libkmod-file-gracefully-handle-errors-from-zlib.patch
+ patch -Np1 <"$srcdir"/0002-depmod-report-failures-in-loading-symbols.patch
+
+ ./configure \
+ --sysconfdir=/etc \
+ --with-zlib \
+ --with-rootprefix=/usr
+
+ make
+}
+
+check() {
+ make -C "$pkgname-$pkgver" check
+}
+
+package() {
+ make -C "$pkgname-$pkgver" DESTDIR="$pkgdir" install
+
+ # extra directories
+ install -dm755 "$pkgdir"/{etc,usr/lib}/{depmod,modprobe}.d "$pkgdir/sbin"
+
+ # add symlinks to kmod
+ ln -s ../usr/bin/kmod "$pkgdir/sbin/modprobe"
+ ln -s ../usr/bin/kmod "$pkgdir/sbin/depmod"
+
+ for tool in {ins,ls,rm}mod modinfo; do
+ ln -s kmod "$pkgdir/usr/bin/$tool"
+ done
+
+ # install depmod.d file for search/ dir
+ install -Dm644 "$srcdir/depmod-search.conf" "$pkgdir/usr/lib/depmod.d/search.conf"
+}
+
+# vim: ft=sh syn=sh et
diff --git a/testing/kmod/depmod-search.conf b/testing/kmod/depmod-search.conf
new file mode 100644
index 000000000..36f2cf7db
--- /dev/null
+++ b/testing/kmod/depmod-search.conf
@@ -0,0 +1,5 @@
+#
+# /usr/lib/depmod.d/search.conf
+#
+
+search updates extramodules built-in